graphdb-workbench 10.0.0-M2-1 → 10.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -2
- package/dist/0.f8448f998a59db17e94e.bundle.js +25 -0
- package/dist/1.46d9ecd4119bac145f3b.bundle.js +81 -0
- package/dist/10.a26ae97905866618b14e.bundle.js +7 -0
- package/dist/100.aef098a33fbb925e0d2d.bundle.js +1 -0
- package/dist/101.42eacc63e0fb5834b78a.bundle.js +1 -0
- package/dist/102.4f78eeab62aac245879e.bundle.js +1 -0
- package/dist/103.f38f3cd69ff610955aaf.bundle.js +1 -0
- package/dist/104.2e21f1462021dca17db1.bundle.js +1 -0
- package/dist/105.76381cb7984bcbc9ba9a.bundle.js +1 -0
- package/dist/106.23e14c6b280756d04533.bundle.js +1 -0
- package/dist/107.75e40619cb45972dc39f.bundle.js +1 -0
- package/dist/108.f09444e990531d27e0be.bundle.js +1 -0
- package/dist/109.ef97393181ee534042d8.bundle.js +1 -0
- package/dist/11.0fc995ac096734b915c6.bundle.js +1 -0
- package/dist/110.d59b8565d2255a282669.bundle.js +1 -0
- package/dist/111.fff9f089f65f01013923.bundle.js +1 -0
- package/dist/112.5bd3fcd7c37f1024fe26.bundle.js +1 -0
- package/dist/113.2fa29eca15d32deb3320.bundle.js +1 -0
- package/dist/114.d78615087abe68db7b2f.bundle.js +1 -0
- package/dist/115.558ce3da00d3be87d18a.bundle.js +1 -0
- package/dist/116.577aab1d9bafd0053623.bundle.js +1 -0
- package/dist/117.c20f037799328c931eba.bundle.js +1 -0
- package/dist/118.39c8b47405ab93c40847.bundle.js +1 -0
- package/dist/119.19ee7b3ae143f817c5b1.bundle.js +1 -0
- package/dist/12.7877dd6008df9acf44e1.bundle.js +1 -0
- package/dist/120.b944d5e63424d4307fc8.bundle.js +1 -0
- package/dist/121.3a8954e4c885c56a9817.bundle.js +1 -0
- package/dist/122.71a8cf0330504672fffc.bundle.js +1 -0
- package/dist/123.c6957ecb441d8a09932a.bundle.js +1 -0
- package/dist/124.27e85a0284e2ebeb7d6e.bundle.js +1 -0
- package/dist/125.9e925ae0dd1217d81d89.bundle.js +1 -0
- package/dist/126.a32b57d6108545746ed3.bundle.js +1 -0
- package/dist/127.90d1975083eef3d4a715.bundle.js +1 -0
- package/dist/128.544f1a82e19dd245c7de.bundle.js +1 -0
- package/dist/129.64ec11449e0c734500c2.bundle.js +1 -0
- package/dist/13.fe78f15334507bcc08ae.bundle.js +1 -0
- package/dist/130.f8e68ac86e17b3622d40.bundle.js +1 -0
- package/dist/131.4868fc3a837277c30273.bundle.js +1 -0
- package/dist/132.7815ab1168a254cb0d47.bundle.js +1 -0
- package/dist/133.f87e1685dd5ed920f9b5.bundle.js +1 -0
- package/dist/134.8998ff724a077ecff2ce.bundle.js +1 -0
- package/dist/135.c07268699f76ef7a02ff.bundle.js +1 -0
- package/dist/136.908f1f6fe3054f99b560.bundle.js +1 -0
- package/dist/137.8262ca9736e9818284cd.bundle.js +1 -0
- package/dist/138.8c149cad49010a65b3ca.bundle.js +1 -0
- package/dist/139.97ee12e7a3c05be03456.bundle.js +1 -0
- package/dist/14.0bb211bcdc29c6d8b3b5.bundle.js +29 -0
- package/dist/140.6b3c57ffec700081328b.bundle.js +1 -0
- package/dist/141.4981056237955a34b2e2.bundle.js +1 -0
- package/dist/142.4d60c1795eed3a9570f9.bundle.js +1 -0
- package/dist/143.b7057852f7859cf39e75.bundle.js +1 -0
- package/dist/144.3f85f8eacae521d52355.bundle.js +1 -0
- package/dist/145.9281069e9e77978b640a.bundle.js +1 -0
- package/dist/146.51d2987de4defe7df7c7.bundle.js +1 -0
- package/dist/147.54016549674d35bc2869.bundle.js +1 -0
- package/dist/148.ad95b30f508a0bd02970.bundle.js +1 -0
- package/dist/149.8dd1281617389f8c189b.bundle.js +1 -0
- package/dist/15.6a74adbd30b4d2930e10.bundle.js +1 -0
- package/dist/150.5e0ee4350f8edd0e7b9a.bundle.js +1 -0
- package/dist/151.6b81c99a1ec1b184b82d.bundle.js +1 -0
- package/dist/152.2e1aa910a68f0086825b.bundle.js +1 -0
- package/dist/153.7a64973115bdaec26406.bundle.js +1 -0
- package/dist/154.5938248b52830d0a80a2.bundle.js +1 -0
- package/dist/155.a4511849c1001c5f2ba6.bundle.js +1 -0
- package/dist/156.bbcaf52acb0cecbc6257.bundle.js +1 -0
- package/dist/157.51181d03518519f84b5e.bundle.js +1 -0
- package/dist/158.640e412f6002ee1d7341.bundle.js +1 -0
- package/dist/159.10457cbb053c1315d93a.bundle.js +1 -0
- package/dist/16.2f60fbeaccd97aefaae2.bundle.js +1 -0
- package/dist/160.c46bfdf09357a4c62a53.bundle.js +1 -0
- package/dist/{103.05b86c1b360c05133b49.bundle.js → 161.0f35ee11981f0ea0455f.bundle.js} +1 -2
- package/dist/{104.089568ff7c49a29de892.bundle.js → 162.fef28120701e7d200b01.bundle.js} +1 -2
- package/dist/{105.81b74220f7fa646e719b.bundle.js → 163.38565d40ac5f71d1c875.bundle.js} +1 -2
- package/dist/164.b2116f472aa847618aee.bundle.js +1 -0
- package/dist/168.2d4b5a75da5430c73efc.bundle.js +1 -0
- package/dist/169.6897f56896e3664e8b53.bundle.js +1 -0
- package/dist/17.2bff7856b13fd72e2db4.bundle.js +1 -0
- package/dist/170.d5c0d475c5b6ad84ef77.bundle.js +1 -0
- package/dist/171.60cdc91b2bf682a20911.bundle.js +1 -0
- package/dist/172.1fb9ead3e508a7cfa5f3.bundle.js +1 -0
- package/dist/173.95602c81a2692624a015.bundle.js +1 -0
- package/dist/174.aac1982e67b5ca1731c1.bundle.js +1 -0
- package/dist/175.5e49a28397900168f816.bundle.js +1 -0
- package/dist/176.2e6d1a9f4eac4fdd8422.bundle.js +1 -0
- package/dist/177.3b6aabf3c4db8519ea74.bundle.js +1 -0
- package/dist/178.e10370553beb5c6bb839.bundle.js +1 -0
- package/dist/179.784cbd536b8e636c1272.bundle.js +1 -0
- package/dist/18.d6be3e6583bf3dacd54f.bundle.js +2 -0
- package/dist/180.d37db50f3ce1b3a04a65.bundle.js +1 -0
- package/dist/181.f307cabdc4ed7a10ff64.bundle.js +1 -0
- package/dist/182.e8fe148e90fcd334b9b9.bundle.js +1 -0
- package/dist/183.a086e00d4dc3c7855611.bundle.js +1 -0
- package/dist/184.ff8a39692d0ff666c9e6.bundle.js +1 -0
- package/dist/185.8b9f0b866e848f8a1aac.bundle.js +1 -0
- package/dist/186.798880846274da7033da.bundle.js +1 -0
- package/dist/{120.3b0b67fbfa81ec95e044.bundle.js → 187.eb92a35d38294bc21703.bundle.js} +1 -2
- package/dist/{121.ff452d05188836228deb.bundle.js → 188.641582484af80415d29a.bundle.js} +1 -2
- package/dist/189.7ccbb0ef67513ae7001a.bundle.js +1 -0
- package/dist/19.c2a5c3e7a49a4acba486.bundle.js +2 -0
- package/dist/{123.289bb9a87ce416004c0a.bundle.js → 190.a3609218c5d8e873a46f.bundle.js} +1 -2
- package/dist/191.4c817606bf66c16d9ad1.bundle.js +1 -0
- package/dist/{125.51ff26fe7687752811e4.bundle.js → 192.21f366a1ea7e6905f120.bundle.js} +1 -2
- package/dist/193.4d40b788bd7ddcf16788.bundle.js +1 -0
- package/dist/{127.4d0a2164fb95df43ea22.bundle.js → 194.0170093f1daf20e82b5f.bundle.js} +1 -2
- package/dist/{128.c7a3530622ede2f34e72.bundle.js → 195.d7d8af61458f9416878f.bundle.js} +1 -2
- package/dist/{129.2d32313059ae96dba010.bundle.js → 196.6e6b7589cd1342a0b2b5.bundle.js} +1 -2
- package/dist/{130.7302112cf14a10bd1306.bundle.js → 197.c071fa1fe9e081a3b053.bundle.js} +1 -2
- package/dist/{131.eb262b5100305bdc23ee.bundle.js → 198.3c5ca9ac5a745b4b23a1.bundle.js} +1 -2
- package/dist/199.00ac5221a334189ea09a.bundle.js +1 -0
- package/dist/2.78b4e53269171c9c08a5.bundle.js +1 -0
- package/dist/20.8fd969e3860ddffedcc3.bundle.js +1 -0
- package/dist/{133.f855496341ba657eb673.bundle.js → 200.aa3f4dcf9cf98409dbf5.bundle.js} +1 -2
- package/dist/201.a1b147e78f43a3bc99c3.bundle.js +1 -0
- package/dist/202.20e71b18f57e7d234ff0.bundle.js +1 -0
- package/dist/{136.74f131c98a163b48e3df.bundle.js → 203.0219c2ba2d4fe4881af2.bundle.js} +1 -2
- package/dist/204.cc169603e18b84e7e65b.bundle.js +1 -0
- package/dist/{138.9111fe731587313e4574.bundle.js → 205.99fb3c89cd9b9183ddbf.bundle.js} +1 -2
- package/dist/206.43b04d2170165e13353c.bundle.js +1 -0
- package/dist/207.798c195e1d7d3f301131.bundle.js +1 -0
- package/dist/208.34f042066a757f4fd8c0.bundle.js +1 -0
- package/dist/{142.5ced0a8e7a08aea7988f.bundle.js → 209.288844c6a42ff4d5685a.bundle.js} +1 -2
- package/dist/21.c981976c6528073c0a2f.bundle.js +1 -0
- package/dist/210.1ac38e393ca959703d4b.bundle.js +1 -0
- package/dist/211.d2721b9785e609e2f817.bundle.js +1 -0
- package/dist/212.b6b19c939f21132b451c.bundle.js +1 -0
- package/dist/213.5a5116f764e6357e53ab.bundle.js +1 -0
- package/dist/{147.f6bd445276a200981cff.bundle.js → 214.a2640be51c42d820bb83.bundle.js} +1 -2
- package/dist/215.209396a71f130477e2b3.bundle.js +1 -0
- package/dist/216.16e2e982acc750b4045a.bundle.js +1 -0
- package/dist/217.8540eb1d1a0946e72dbf.bundle.js +1 -0
- package/dist/218.ef33580c82d20f39f75f.bundle.js +1 -0
- package/dist/219.1652bc940cdd0088dc18.bundle.js +1 -0
- package/dist/22.9d339503774f4f6c0a8b.bundle.js +1 -0
- package/dist/{153.ebc378a7a60222b69484.bundle.js → 220.f8f9c348b1fc0cc72bd6.bundle.js} +1 -2
- package/dist/221.b18a92f0ba880edaebbf.bundle.js +1 -0
- package/dist/222.a52ebecd1d5201437ebe.bundle.js +1 -0
- package/dist/23.87ca8226d464e3699b8e.bundle.js +3 -0
- package/dist/24.9076b75f45ce0579f7be.bundle.js +1 -0
- package/dist/25.073791b8dd02c5b31183.bundle.js +1 -0
- package/dist/26.6e06be7172a866ad45f9.bundle.js +2 -0
- package/dist/27.5152c2a1f3b1369e21b0.bundle.js +1 -0
- package/dist/28.90b784e728e3d5e4c6aa.bundle.js +1 -0
- package/dist/29.e2309b858706718f1732.bundle.js +1 -0
- package/dist/3.cf89087c137e759ecd19.bundle.js +27 -0
- package/dist/30.32fb84930c42bae43a74.bundle.js +1 -0
- package/dist/31.31b7b4bd073b82c09fda.bundle.js +1 -0
- package/dist/32.6725d94946764db833b8.bundle.js +1 -0
- package/dist/33.fa9f0e662060f2e97267.bundle.js +1 -0
- package/dist/34.af22bc6d5ed2bcb72a09.bundle.js +1 -0
- package/dist/35.e601e19e63c6ddaf2484.bundle.js +1 -0
- package/dist/36.df47a70d8efbf1cd033b.bundle.js +1 -0
- package/dist/37.085cdb373f74d55eee07.bundle.js +2 -0
- package/dist/38.fc172c7b0d24ab0f8a35.bundle.js +1 -0
- package/dist/39.5ca9fa51ec3c63459317.bundle.js +1 -0
- package/dist/4.851f9ade6202116ecfb9.bundle.js +1 -0
- package/dist/40.309ec5212fd53fe696bb.bundle.js +1 -0
- package/dist/41.3870740f1d24570cb415.bundle.js +1 -0
- package/dist/42.b926c2c8620df5c7ed6d.bundle.js +1 -0
- package/dist/43.d4551e1f6cac0a1a77e5.bundle.js +1 -0
- package/dist/44.46c9e2d54a9f07d78368.bundle.js +1 -0
- package/dist/45.a916daee1f0c6873c890.bundle.js +1 -0
- package/dist/46.4f57238bd032edc81d6d.bundle.js +1 -0
- package/dist/47.4fbfdaa63628c501a30c.bundle.js +1 -0
- package/dist/48.3fbd50adcb0c7dd7ec60.bundle.js +1 -0
- package/dist/49.0707795b3b6e40387da8.bundle.js +1 -0
- package/dist/5.7cfbc07050f137932ffe.bundle.js +1 -0
- package/dist/50.8f6cc698b42c96f2b41f.bundle.js +1 -0
- package/dist/51.514a339efd6cd11db0f8.bundle.js +1 -0
- package/dist/52.410a7d8b4cb433fb24ca.bundle.js +1 -0
- package/dist/53.174d18435f7bf3bf05a0.bundle.js +1 -0
- package/dist/54.7cb3bd3ae8055e350629.bundle.js +1 -0
- package/dist/55.f0762e755ba58cbaac26.bundle.js +1 -0
- package/dist/56.3b0312e77f8607a4d957.bundle.js +1 -0
- package/dist/57.dfb7a710da8ca09c725b.bundle.js +1 -0
- package/dist/58.ac0fa95bbbe4b2dfb0fc.bundle.js +1 -0
- package/dist/59.273ffcd48e856d2752ff.bundle.js +1 -0
- package/dist/6.c5eea752e1f541f494e8.bundle.js +1 -0
- package/dist/60.00a29320ea162becd718.bundle.js +1 -0
- package/dist/61.3794de8b6d022738bafa.bundle.js +1 -0
- package/dist/62.cf39ad55adb1616560ec.bundle.js +1 -0
- package/dist/63.8880f667c958d12b338b.bundle.js +1 -0
- package/dist/64.fdd90fedc8a5dc3cacaf.bundle.js +1 -0
- package/dist/65.cdc961a8042c385c49c6.bundle.js +1 -0
- package/dist/66.c3b906de2fcf69089b7b.bundle.js +1 -0
- package/dist/67.9c851e5930459a5f5903.bundle.js +1 -0
- package/dist/68.05bba948c414a1e21c8f.bundle.js +1 -0
- package/dist/69.c5561c83fe410ea9a908.bundle.js +1 -0
- package/dist/7.14f008aaac190939acd3.bundle.js +7 -0
- package/dist/70.f2557c225be5923bab24.bundle.js +1 -0
- package/dist/71.e9c3c5ccc70f443c97cf.bundle.js +1 -0
- package/dist/72.0780a8424293909f94a4.bundle.js +1 -0
- package/dist/73.57e88cee0af3f67aee77.bundle.js +1 -0
- package/dist/74.48e90caf0b5ecd351f1d.bundle.js +1 -0
- package/dist/75.c75a824264d0e67421ed.bundle.js +1 -0
- package/dist/76.2ad0f5373462bc70bebf.bundle.js +1 -0
- package/dist/77.303a075d21928354102c.bundle.js +1 -0
- package/dist/78.66f3e9630550f20287ff.bundle.js +1 -0
- package/dist/79.29d39a29721f936ae688.bundle.js +1 -0
- package/dist/8.b5e29f80f8a5766d70d5.bundle.js +2 -0
- package/dist/80.8af0388db859fcc9fbf3.bundle.js +1 -0
- package/dist/{47.686e599732ae6f41120c.bundle.js → 81.2ff1f5047ab4e0591585.bundle.js} +1 -2
- package/dist/82.27bb51dfeb4898504e96.bundle.js +1 -0
- package/dist/83.a59d34bc50cf323af43d.bundle.js +1 -0
- package/dist/84.a4ee7bb5d3ed2e6ead5e.bundle.js +1 -0
- package/dist/{51.895a3dacdc3a8eaee275.bundle.js → 85.1f1b07562fbf97ab3e11.bundle.js} +1 -2
- package/dist/86.637667a4555ae621aff0.bundle.js +1 -0
- package/dist/87.b76338a62297ad83960b.bundle.js +1 -0
- package/dist/88.532e7295b49b1071d45c.bundle.js +1 -0
- package/dist/89.90bb1cf65f183ecce47c.bundle.js +1 -0
- package/dist/9.610b595b60a0fc51466a.bundle.js +1 -0
- package/dist/90.683c4d5b142356f274ef.bundle.js +1 -0
- package/dist/{56.91947e80d8e04223ac58.bundle.js → 91.2437dfc2ea1bc89f53f3.bundle.js} +1 -2
- package/dist/92.a12cfd3b602e98b344de.bundle.js +1 -0
- package/dist/93.a5cb6192d32cb016bb60.bundle.js +1 -0
- package/dist/94.f6a3e7628449796419b6.bundle.js +1 -0
- package/dist/95.15f0e472c49c81a68c3a.bundle.js +1 -0
- package/dist/96.2bf3b75fb0efb6b9e7e8.bundle.js +1 -0
- package/dist/97.bd1988af419f7373b569.bundle.js +1 -0
- package/dist/98.060c6842b3a8ed94dd20.bundle.js +1 -0
- package/dist/{64.ac922cb38c3ff6c431fb.bundle.js → 99.6360b70da56083cd76fe.bundle.js} +1 -2
- package/dist/bundle.39b836d40f0926aeec16.bundle.js +91 -0
- package/dist/css/aclmanagement.css +114 -0
- package/dist/css/angular-tooltips.css +144 -0
- package/dist/css/autocomplete-select.css +62 -0
- package/dist/css/backup-and-restore.css +7 -0
- package/dist/css/bootstrap-graphdb-theme-dark-auto.css +36 -0
- package/dist/css/bootstrap-graphdb-theme.css +514 -252
- package/dist/css/clustermanagement.css +145 -266
- package/dist/css/common.css +105 -0
- package/dist/css/dependencies.css +4 -4
- package/dist/css/domain-range-graph.css +3 -3
- package/dist/css/explore.css +7 -1
- package/dist/css/export.css +13 -9
- package/dist/css/find.css +2 -3
- package/dist/css/fonts/icons.eot +0 -0
- package/dist/css/fonts/icons.svg +14 -5
- package/dist/css/fonts/icons.ttf +0 -0
- package/dist/css/fonts/icons.woff +0 -0
- package/dist/css/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-600.woff +0 -0
- package/dist/css/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-600.woff2 +0 -0
- package/dist/css/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-600italic.woff +0 -0
- package/dist/css/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-600italic.woff2 +0 -0
- package/dist/css/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-italic.woff +0 -0
- package/dist/css/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-italic.woff2 +0 -0
- package/dist/css/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-regular.woff +0 -0
- package/dist/css/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-regular.woff2 +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-300.woff +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-300.woff2 +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-300italic.woff +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-300italic.woff2 +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-500.woff +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-500.woff2 +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-500italic.woff +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-500italic.woff2 +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-italic.woff +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-italic.woff2 +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-regular.woff +0 -0
- package/dist/css/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-regular.woff2 +0 -0
- package/dist/css/graphs-config.css +4 -4
- package/dist/css/graphs-vizualizations.css +11 -10
- package/dist/css/guides.css +9 -0
- package/dist/css/jmx.css +22 -0
- package/dist/css/lib/angular-xeditable/xeditable.min.css +2 -2
- package/dist/css/new-sparql.css +68 -2
- package/dist/css/operations-statuses-monitor.css +111 -0
- package/dist/css/plugins.css +7 -18
- package/dist/css/rdf-class-hierarchy-labels.css +2 -2
- package/dist/css/rdf-class-hierarchy.css +3 -3
- package/dist/css/rdf-details-side-panel.css +8 -1
- package/dist/css/rdf-resource-search.css +5 -2
- package/dist/css/repositories.css +73 -31
- package/dist/css/repository.create.css +14 -4
- package/dist/css/shepherd-custom.css +80 -0
- package/dist/css/workbench-custom.css +54 -14
- package/dist/css/yasr.custom.css +28 -6
- package/dist/font/{icons.f404525bf0491c43fc1c35fc43fe14d8.eot → icons.23e96f215ba03e98233de883d2c30b60.eot} +0 -0
- package/dist/i18n/locale-en.json +488 -129
- package/dist/i18n/locale-fr.json +602 -261
- package/dist/icon.png +0 -0
- package/dist/img/{graphdb-logo-sq.75ddb875d9a986a6ac944450ae134725.svg → graphdb-logo-sq.3a5fb4b3f1e0e248dc308da1bf4de9f8.svg} +4 -4
- package/dist/img/{graphdb-logo.cb18d544b9cf2eb6062daa81bdb1f850.svg → graphdb-logo.741abf3e3881e1566e4504c9f00b91c0.svg} +3 -4
- package/dist/img/{graphdb-small.635110bdf15de2ad589b6e3fdaa75887.svg → graphdb-small.5f94ee13e65870be1db31bb89e6deded.svg} +6 -6
- package/dist/img/graphdb-splash.1ef2940889acddc03c7defb3f9f41f8d.svg +1 -0
- package/dist/img/{icons.2271b2cdd5a3d1037d80bf831f4918cc.svg → icons.ab6168834b8775f511d09c8fad540b27.svg} +14 -5
- package/dist/index.html +87 -85
- package/dist/js/angular/autocomplete/templates/modal/add-label.html +9 -8
- package/dist/js/angular/chatgpt/templates/chat.html +113 -0
- package/dist/js/angular/chatgpt/templates/chatInfo.html +11 -0
- package/dist/js/angular/chatgpt/templates/modal/settings.html +61 -0
- package/dist/js/angular/clustermanagement/templates/modal/add-nodes-dialog.html +67 -0
- package/dist/js/angular/clustermanagement/templates/modal/cluster-create-dialog.html +173 -0
- package/dist/js/angular/clustermanagement/templates/modal/cluster-delete-dialog.html +9 -14
- package/dist/js/angular/clustermanagement/templates/modal/cluster-edit-dialog.html +118 -0
- package/dist/js/angular/clustermanagement/templates/modal/remove-nodes-dialog.html +39 -0
- package/dist/js/angular/clustermanagement/templates/modal/replace-nodes-dialog.html +86 -0
- package/dist/js/angular/core/directives/autocomplete/templates/autocomplete.html +18 -0
- package/dist/js/angular/core/directives/languageselector/templates/languageSelector.html +9 -7
- package/dist/js/angular/core/directives/operations-statuses-monitor/templates/operations-statuses-monitor.html +57 -0
- package/dist/js/angular/core/directives/queryeditor/templates/query-editor.html +44 -56
- package/dist/js/angular/core/directives/queryeditor/templates/query-sample.html +11 -11
- package/dist/js/angular/core/directives/rdfresourcesearch/templates/rdfResourceSearchTemplate.html +4 -6
- package/dist/js/angular/core/templates/core-errors.html +27 -18
- package/dist/js/angular/core/templates/inactive-plugin-warning-page.html +1 -2
- package/dist/js/angular/core/templates/modal/copy-to-clipboard-modal.html +9 -10
- package/dist/js/angular/core/templates/modal/modal-warning.html +1 -1
- package/dist/js/angular/core/templates/search-resource-input.html +9 -9
- package/dist/js/angular/externalsync/templates/deleteConnector.html +5 -5
- package/dist/js/angular/graphexplore/templates/modal/save-graph.html +10 -11
- package/dist/js/angular/graphexplore/templates/rdfsCommentLabelTemplate.html +4 -6
- package/dist/js/angular/graphexplore/templates/searchIconInputTemplate.html +5 -7
- package/dist/js/angular/import/templates/filesTable.html +15 -15
- package/dist/js/angular/import/templates/settingsModal.html +231 -231
- package/dist/js/angular/import/templates/textSnippet.html +4 -4
- package/dist/js/angular/import/templates/urlImport.html +7 -5
- package/dist/js/angular/repositories/templates/fedx-repo.html +53 -49
- package/dist/js/angular/repositories/templates/ontop-repo.html +191 -60
- package/dist/js/angular/security/templates/modal/default-authorities.html +12 -12
- package/dist/js/angular/security/templates/user.html +102 -41
- package/dist/js/angular/security/templates/users.html +24 -17
- package/dist/js/angular/settings/modal/location-settings.html +17 -18
- package/dist/js/angular/settings/modal/validate-license.html +19 -6
- package/dist/js/angular/templates/graphdb-small.svg +6 -6
- package/dist/js/angular/templates/modal/add-fedx-remote-repo.html +17 -15
- package/dist/js/angular/templates/modal/add-location.html +18 -22
- package/dist/js/angular/templates/modal/edit-location.html +11 -11
- package/dist/js/angular/templates/modal/editRepoFile.html +2 -2
- package/dist/js/angular/templates/modal/upload-repository-config.html +2 -2
- package/dist/js/angular/templates/repositorySize.html +7 -1
- package/dist/js/lib/angucomplete-alt/angucomplete-alt.css +2 -2
- package/dist/js/lib/rzslider/rzslider.min.css +1 -1
- package/dist/license-checker-static.json +128 -0
- package/dist/license-checker.json +872 -0
- package/dist/main.3ac2b4b19f56209c6467.css +1 -0
- package/dist/main.948c3b96766ce09e145b.bundle.js +1 -0
- package/dist/pages/aclmanagement.html +177 -0
- package/dist/pages/autocomplete.html +16 -12
- package/dist/pages/choose-repository-type.html +8 -8
- package/dist/pages/cluster-management/clusterInfo.html +160 -138
- package/dist/pages/connectorsInfo.html +23 -18
- package/dist/pages/create-index.html +18 -18
- package/dist/pages/createConnector.html +137 -137
- package/dist/pages/dependencies.html +23 -31
- package/dist/pages/domainRangeInfo.html +16 -19
- package/dist/pages/edit.html +15 -15
- package/dist/pages/explore.html +22 -25
- package/dist/pages/export.html +38 -39
- package/dist/pages/find.html +3 -3
- package/dist/pages/graph-config/saveGraphConfig.html +43 -43
- package/dist/pages/graphs-visualizations.html +71 -78
- package/dist/pages/guides.html +60 -0
- package/dist/pages/home.html +46 -28
- package/dist/pages/import.html +11 -10
- package/dist/pages/info.html +18 -18
- package/dist/pages/jdbc-create.html +48 -46
- package/dist/pages/jdbc.html +4 -4
- package/dist/pages/licenseInfo.html +66 -48
- package/dist/pages/login.html +5 -6
- package/dist/pages/monitor/backup-and-restore.html +80 -0
- package/dist/pages/monitor/queries.html +7 -8
- package/dist/pages/monitor/resources.html +213 -79
- package/dist/pages/namespaces.html +22 -21
- package/dist/pages/plugins.html +9 -10
- package/dist/pages/rdfClassHierarchyInfo.html +31 -35
- package/dist/pages/rdfrank.html +25 -27
- package/dist/pages/registerLicenseInfo.html +10 -12
- package/dist/pages/repositories.html +170 -193
- package/dist/pages/repository.html +124 -58
- package/dist/pages/similarity-indexes.html +18 -18
- package/dist/pages/sparql-template-create.html +30 -29
- package/dist/pages/sparql-templates.html +4 -4
- package/dist/pages/sparql.html +11 -11
- package/dist/pages/ux-test1.html +102 -0
- package/dist/pages/ux-test2.html +17 -0
- package/dist/pages/webapi.html +4 -4
- package/dist/plugin-registry.js +14 -0
- package/dist/plugins.js +1967 -84
- package/dist/res/sparql/keyboard-shortcuts.html +7 -1
- package/dist/res/swagger/css/onto-theme.css +8 -0
- package/dist/res/swagger/css/reset.css +1 -2
- package/dist/res/swagger/css/screen.css +6 -15
- package/dist/res/swagger/fonts/icons.woff +0 -0
- package/dist/res/swagger/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-600.woff +0 -0
- package/dist/res/swagger/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-600.woff2 +0 -0
- package/dist/res/swagger/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-600italic.woff +0 -0
- package/dist/res/swagger/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-600italic.woff2 +0 -0
- package/dist/res/swagger/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-italic.woff +0 -0
- package/dist/res/swagger/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-italic.woff2 +0 -0
- package/dist/res/swagger/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-regular.woff +0 -0
- package/dist/res/swagger/fonts/jetbrains-mono-v12-vietnamese_latin-ext_latin_greek_cyrillic-ext_cyrillic-regular.woff2 +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-300.woff +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-300.woff2 +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-300italic.woff +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-300italic.woff2 +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-500.woff +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-500.woff2 +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-500italic.woff +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-500italic.woff2 +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-italic.woff +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-italic.woff2 +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-regular.woff +0 -0
- package/dist/res/swagger/fonts/roboto-v30-vietnamese_latin-ext_latin_greek-ext_greek_cyrillic-ext_cyrillic-regular.woff2 +0 -0
- package/dist/res/swagger/fonts/rubik-italic.woff +0 -0
- package/dist/res/swagger/fonts/rubik-italic.woff2 +0 -0
- package/dist/res/swagger/fonts/rubik-light.woff +0 -0
- package/dist/res/swagger/fonts/rubik-light.woff2 +0 -0
- package/dist/res/swagger/fonts/rubik-lightitalic.woff +0 -0
- package/dist/res/swagger/fonts/rubik-lightitalic.woff2 +0 -0
- package/dist/res/swagger/fonts/rubik-medium.woff +0 -0
- package/dist/res/swagger/fonts/rubik-medium.woff2 +0 -0
- package/dist/res/swagger/fonts/rubik-mediumitalic.woff +0 -0
- package/dist/res/swagger/fonts/rubik-mediumitalic.woff2 +0 -0
- package/dist/res/swagger/fonts/rubik-regular.woff +0 -0
- package/dist/res/swagger/fonts/rubik-regular.woff2 +0 -0
- package/dist/res/swagger/index.html +27 -25
- package/dist/vendor.7b6ede99ef82acd3dcf5.bundle.js +27 -0
- package/dist/{vendor.4ba46e62f4d43dab5e82.css → vendor.d1c629ceaacea40a5f4a.css} +1 -1
- package/package.json +13 -9
- package/dist/0.32d0f91ca9c8d09fb6f1.bundle.js +0 -82
- package/dist/0.32d0f91ca9c8d09fb6f1.bundle.js.map +0 -1
- package/dist/1.6300131e72a9f28f9df3.bundle.js +0 -27
- package/dist/1.6300131e72a9f28f9df3.bundle.js.map +0 -1
- package/dist/10.bb0713b18c3e55445fa7.bundle.js +0 -2
- package/dist/10.bb0713b18c3e55445fa7.bundle.js.map +0 -1
- package/dist/100.acbece8e389effbcfa2e.bundle.js +0 -2
- package/dist/100.acbece8e389effbcfa2e.bundle.js.map +0 -1
- package/dist/101.abc28aeafc8c037b80dc.bundle.js +0 -2
- package/dist/101.abc28aeafc8c037b80dc.bundle.js.map +0 -1
- package/dist/102.236df15ec49946c8799a.bundle.js +0 -2
- package/dist/102.236df15ec49946c8799a.bundle.js.map +0 -1
- package/dist/103.05b86c1b360c05133b49.bundle.js.map +0 -1
- package/dist/104.089568ff7c49a29de892.bundle.js.map +0 -1
- package/dist/105.81b74220f7fa646e719b.bundle.js.map +0 -1
- package/dist/106.5de7943f8a3adda97372.bundle.js +0 -2
- package/dist/106.5de7943f8a3adda97372.bundle.js.map +0 -1
- package/dist/11.288d37db1902f00f7c8e.bundle.js +0 -2
- package/dist/11.288d37db1902f00f7c8e.bundle.js.map +0 -1
- package/dist/110.5a553b21d45a64e7e321.bundle.js +0 -2
- package/dist/110.5a553b21d45a64e7e321.bundle.js.map +0 -1
- package/dist/111.04e34833a2c4fc227899.bundle.js +0 -2
- package/dist/111.04e34833a2c4fc227899.bundle.js.map +0 -1
- package/dist/112.b2bdfd64c50509d05503.bundle.js +0 -2
- package/dist/112.b2bdfd64c50509d05503.bundle.js.map +0 -1
- package/dist/113.b386b036c2a3d9077f64.bundle.js +0 -2
- package/dist/113.b386b036c2a3d9077f64.bundle.js.map +0 -1
- package/dist/114.0768e042a8e6ec856942.bundle.js +0 -2
- package/dist/114.0768e042a8e6ec856942.bundle.js.map +0 -1
- package/dist/115.374b221f284e8755ef31.bundle.js +0 -2
- package/dist/115.374b221f284e8755ef31.bundle.js.map +0 -1
- package/dist/116.ca9d40889c222f47c45f.bundle.js +0 -2
- package/dist/116.ca9d40889c222f47c45f.bundle.js.map +0 -1
- package/dist/117.92f7630bfb95444a87e8.bundle.js +0 -2
- package/dist/117.92f7630bfb95444a87e8.bundle.js.map +0 -1
- package/dist/118.7e28dcfd80b93a705d71.bundle.js +0 -2
- package/dist/118.7e28dcfd80b93a705d71.bundle.js.map +0 -1
- package/dist/119.e3a038ffb960ed3661fe.bundle.js +0 -2
- package/dist/119.e3a038ffb960ed3661fe.bundle.js.map +0 -1
- package/dist/12.9004ab127289745129a4.bundle.js +0 -4
- package/dist/12.9004ab127289745129a4.bundle.js.map +0 -1
- package/dist/120.3b0b67fbfa81ec95e044.bundle.js.map +0 -1
- package/dist/121.ff452d05188836228deb.bundle.js.map +0 -1
- package/dist/122.1b8056c745358fa2f6cb.bundle.js +0 -2
- package/dist/122.1b8056c745358fa2f6cb.bundle.js.map +0 -1
- package/dist/123.289bb9a87ce416004c0a.bundle.js.map +0 -1
- package/dist/124.75965fcb93d0fe988609.bundle.js +0 -2
- package/dist/124.75965fcb93d0fe988609.bundle.js.map +0 -1
- package/dist/125.51ff26fe7687752811e4.bundle.js.map +0 -1
- package/dist/126.b89a0728154793be4eb9.bundle.js +0 -2
- package/dist/126.b89a0728154793be4eb9.bundle.js.map +0 -1
- package/dist/127.4d0a2164fb95df43ea22.bundle.js.map +0 -1
- package/dist/128.c7a3530622ede2f34e72.bundle.js.map +0 -1
- package/dist/129.2d32313059ae96dba010.bundle.js.map +0 -1
- package/dist/13.897f9af290de9fbd43bb.bundle.js +0 -16
- package/dist/13.897f9af290de9fbd43bb.bundle.js.map +0 -1
- package/dist/130.7302112cf14a10bd1306.bundle.js.map +0 -1
- package/dist/131.eb262b5100305bdc23ee.bundle.js.map +0 -1
- package/dist/132.264b9ebf860e308417ad.bundle.js +0 -2
- package/dist/132.264b9ebf860e308417ad.bundle.js.map +0 -1
- package/dist/133.f855496341ba657eb673.bundle.js.map +0 -1
- package/dist/134.91de2ab11c49967200ad.bundle.js +0 -2
- package/dist/134.91de2ab11c49967200ad.bundle.js.map +0 -1
- package/dist/135.82e48e81e60b2ab89e04.bundle.js +0 -2
- package/dist/135.82e48e81e60b2ab89e04.bundle.js.map +0 -1
- package/dist/136.74f131c98a163b48e3df.bundle.js.map +0 -1
- package/dist/137.89253235e0e48f86534b.bundle.js +0 -2
- package/dist/137.89253235e0e48f86534b.bundle.js.map +0 -1
- package/dist/138.9111fe731587313e4574.bundle.js.map +0 -1
- package/dist/139.642cab70149cdfc8c034.bundle.js +0 -2
- package/dist/139.642cab70149cdfc8c034.bundle.js.map +0 -1
- package/dist/14.3c22be70e13b5347940a.bundle.js +0 -3
- package/dist/14.3c22be70e13b5347940a.bundle.js.map +0 -1
- package/dist/140.8fcbd3b16a54b9ca5d80.bundle.js +0 -2
- package/dist/140.8fcbd3b16a54b9ca5d80.bundle.js.map +0 -1
- package/dist/141.09939d5f25d69d9e1bdd.bundle.js +0 -2
- package/dist/141.09939d5f25d69d9e1bdd.bundle.js.map +0 -1
- package/dist/142.5ced0a8e7a08aea7988f.bundle.js.map +0 -1
- package/dist/143.1bd6e2941d5c9fdc9e77.bundle.js +0 -2
- package/dist/143.1bd6e2941d5c9fdc9e77.bundle.js.map +0 -1
- package/dist/144.34dd1b710f93da283e39.bundle.js +0 -2
- package/dist/144.34dd1b710f93da283e39.bundle.js.map +0 -1
- package/dist/145.832e90a54396296da91b.bundle.js +0 -2
- package/dist/145.832e90a54396296da91b.bundle.js.map +0 -1
- package/dist/146.a4ab1f2f5177d9e27861.bundle.js +0 -2
- package/dist/146.a4ab1f2f5177d9e27861.bundle.js.map +0 -1
- package/dist/147.f6bd445276a200981cff.bundle.js.map +0 -1
- package/dist/148.1c23268b87514b7220b3.bundle.js +0 -2
- package/dist/148.1c23268b87514b7220b3.bundle.js.map +0 -1
- package/dist/149.82fc16905f1377c6610a.bundle.js +0 -2
- package/dist/149.82fc16905f1377c6610a.bundle.js.map +0 -1
- package/dist/15.ba4fe6f57951d2f73adc.bundle.js +0 -2
- package/dist/15.ba4fe6f57951d2f73adc.bundle.js.map +0 -1
- package/dist/150.6d8e3bb0cbc5774322d9.bundle.js +0 -2
- package/dist/150.6d8e3bb0cbc5774322d9.bundle.js.map +0 -1
- package/dist/151.c752cbb4d5f9299df813.bundle.js +0 -2
- package/dist/151.c752cbb4d5f9299df813.bundle.js.map +0 -1
- package/dist/152.78d7840c4b8f93748bfe.bundle.js +0 -2
- package/dist/152.78d7840c4b8f93748bfe.bundle.js.map +0 -1
- package/dist/153.ebc378a7a60222b69484.bundle.js.map +0 -1
- package/dist/154.4452ad65074e44967389.bundle.js +0 -2
- package/dist/154.4452ad65074e44967389.bundle.js.map +0 -1
- package/dist/155.12819130f26753e109ad.bundle.js +0 -2
- package/dist/155.12819130f26753e109ad.bundle.js.map +0 -1
- package/dist/16.a236b38d63123b1a3c61.bundle.js +0 -4
- package/dist/16.a236b38d63123b1a3c61.bundle.js.map +0 -1
- package/dist/17.d8d59fa7fbb3b422fdf8.bundle.js +0 -2
- package/dist/17.d8d59fa7fbb3b422fdf8.bundle.js.map +0 -1
- package/dist/18.bc2da9ff57be136ef082.bundle.js +0 -2
- package/dist/18.bc2da9ff57be136ef082.bundle.js.map +0 -1
- package/dist/19.19811699b6e54f19f71e.bundle.js +0 -3
- package/dist/19.19811699b6e54f19f71e.bundle.js.map +0 -1
- package/dist/2.fb2f97f5c543a24296f6.bundle.js +0 -2
- package/dist/2.fb2f97f5c543a24296f6.bundle.js.map +0 -1
- package/dist/20.df3652981fc73c6a8b8c.bundle.js +0 -2
- package/dist/20.df3652981fc73c6a8b8c.bundle.js.map +0 -1
- package/dist/21.b7fbdf3c3b22b578928c.bundle.js +0 -2
- package/dist/21.b7fbdf3c3b22b578928c.bundle.js.map +0 -1
- package/dist/22.2da0e8ec2ac2048ecd60.bundle.js +0 -3
- package/dist/22.2da0e8ec2ac2048ecd60.bundle.js.map +0 -1
- package/dist/23.4140c4c20347efc963a4.bundle.js +0 -2
- package/dist/23.4140c4c20347efc963a4.bundle.js.map +0 -1
- package/dist/24.219ce55f8f6a5bd02dad.bundle.js +0 -2
- package/dist/24.219ce55f8f6a5bd02dad.bundle.js.map +0 -1
- package/dist/25.e79de2370b1ee4072e19.bundle.js +0 -2
- package/dist/25.e79de2370b1ee4072e19.bundle.js.map +0 -1
- package/dist/26.c1619706b8cbb1ab23cb.bundle.js +0 -2
- package/dist/26.c1619706b8cbb1ab23cb.bundle.js.map +0 -1
- package/dist/27.350dba622e243e1ab5fb.bundle.js +0 -2
- package/dist/27.350dba622e243e1ab5fb.bundle.js.map +0 -1
- package/dist/28.e687c87a5f1dc8a30fd0.bundle.js +0 -2
- package/dist/28.e687c87a5f1dc8a30fd0.bundle.js.map +0 -1
- package/dist/29.34a4af65623cd4af6899.bundle.js +0 -2
- package/dist/29.34a4af65623cd4af6899.bundle.js.map +0 -1
- package/dist/3.dfa66b44200c3fca24a2.bundle.js +0 -2
- package/dist/3.dfa66b44200c3fca24a2.bundle.js.map +0 -1
- package/dist/30.f4738c7c2d74f00f2e5f.bundle.js +0 -2
- package/dist/30.f4738c7c2d74f00f2e5f.bundle.js.map +0 -1
- package/dist/31.ab8f2e70841221e1d427.bundle.js +0 -2
- package/dist/31.ab8f2e70841221e1d427.bundle.js.map +0 -1
- package/dist/32.3210a7952ffcb57daa1a.bundle.js +0 -2
- package/dist/32.3210a7952ffcb57daa1a.bundle.js.map +0 -1
- package/dist/33.fcf9c56901b5590bd603.bundle.js +0 -2
- package/dist/33.fcf9c56901b5590bd603.bundle.js.map +0 -1
- package/dist/34.2c344c05bfc4048c3d53.bundle.js +0 -2
- package/dist/34.2c344c05bfc4048c3d53.bundle.js.map +0 -1
- package/dist/35.423c4a91e80adf5d97c8.bundle.js +0 -2
- package/dist/35.423c4a91e80adf5d97c8.bundle.js.map +0 -1
- package/dist/36.247686b6d65de11ec10d.bundle.js +0 -2
- package/dist/36.247686b6d65de11ec10d.bundle.js.map +0 -1
- package/dist/37.5f6089a939b59309cc82.bundle.js +0 -2
- package/dist/37.5f6089a939b59309cc82.bundle.js.map +0 -1
- package/dist/38.9e79a9ec2f9d5af38692.bundle.js +0 -2
- package/dist/38.9e79a9ec2f9d5af38692.bundle.js.map +0 -1
- package/dist/39.b64ae969a5f5fea4504c.bundle.js +0 -2
- package/dist/39.b64ae969a5f5fea4504c.bundle.js.map +0 -1
- package/dist/4.188966396c80909f58cd.bundle.js +0 -2
- package/dist/4.188966396c80909f58cd.bundle.js.map +0 -1
- package/dist/40.1303e99feecbba2614a7.bundle.js +0 -2
- package/dist/40.1303e99feecbba2614a7.bundle.js.map +0 -1
- package/dist/41.687956ca2240355a838f.bundle.js +0 -2
- package/dist/41.687956ca2240355a838f.bundle.js.map +0 -1
- package/dist/42.78e0302e87b9d244a1d7.bundle.js +0 -2
- package/dist/42.78e0302e87b9d244a1d7.bundle.js.map +0 -1
- package/dist/43.ee0de548c525f8e422ba.bundle.js +0 -2
- package/dist/43.ee0de548c525f8e422ba.bundle.js.map +0 -1
- package/dist/44.38b4979d4b201ae1fffb.bundle.js +0 -2
- package/dist/44.38b4979d4b201ae1fffb.bundle.js.map +0 -1
- package/dist/45.8a0ab002ad0f614964e5.bundle.js +0 -2
- package/dist/45.8a0ab002ad0f614964e5.bundle.js.map +0 -1
- package/dist/46.720c0f65b93f4fe01a7c.bundle.js +0 -2
- package/dist/46.720c0f65b93f4fe01a7c.bundle.js.map +0 -1
- package/dist/47.686e599732ae6f41120c.bundle.js.map +0 -1
- package/dist/48.bdb51ad865126b918831.bundle.js +0 -2
- package/dist/48.bdb51ad865126b918831.bundle.js.map +0 -1
- package/dist/49.74a24e08097ef1f6fcd2.bundle.js +0 -2
- package/dist/49.74a24e08097ef1f6fcd2.bundle.js.map +0 -1
- package/dist/5.9bbd38317d375cd02da2.bundle.js +0 -8
- package/dist/5.9bbd38317d375cd02da2.bundle.js.map +0 -1
- package/dist/50.313e315d4c339ad1bcdd.bundle.js +0 -2
- package/dist/50.313e315d4c339ad1bcdd.bundle.js.map +0 -1
- package/dist/51.895a3dacdc3a8eaee275.bundle.js.map +0 -1
- package/dist/52.1f6bc47f1c9abcc79e8d.bundle.js +0 -2
- package/dist/52.1f6bc47f1c9abcc79e8d.bundle.js.map +0 -1
- package/dist/53.f6c19075252833268cca.bundle.js +0 -2
- package/dist/53.f6c19075252833268cca.bundle.js.map +0 -1
- package/dist/54.599ca3ae32ee1fb5f937.bundle.js +0 -2
- package/dist/54.599ca3ae32ee1fb5f937.bundle.js.map +0 -1
- package/dist/55.c20a51cb1d894f9113b4.bundle.js +0 -2
- package/dist/55.c20a51cb1d894f9113b4.bundle.js.map +0 -1
- package/dist/56.91947e80d8e04223ac58.bundle.js.map +0 -1
- package/dist/57.ab4ee313c9d6c7e29384.bundle.js +0 -2
- package/dist/57.ab4ee313c9d6c7e29384.bundle.js.map +0 -1
- package/dist/58.99c83a8dac31c1b681df.bundle.js +0 -2
- package/dist/58.99c83a8dac31c1b681df.bundle.js.map +0 -1
- package/dist/59.99da52e1d8946ac0f601.bundle.js +0 -2
- package/dist/59.99da52e1d8946ac0f601.bundle.js.map +0 -1
- package/dist/6.6c67a1bcf82bb335b0c4.bundle.js +0 -2
- package/dist/6.6c67a1bcf82bb335b0c4.bundle.js.map +0 -1
- package/dist/60.92b9758945e497e52bac.bundle.js +0 -2
- package/dist/60.92b9758945e497e52bac.bundle.js.map +0 -1
- package/dist/61.42887fbc87f941cf7c81.bundle.js +0 -2
- package/dist/61.42887fbc87f941cf7c81.bundle.js.map +0 -1
- package/dist/62.c21410d6e123395d3920.bundle.js +0 -2
- package/dist/62.c21410d6e123395d3920.bundle.js.map +0 -1
- package/dist/63.1ab0c580ba57aee5479c.bundle.js +0 -2
- package/dist/63.1ab0c580ba57aee5479c.bundle.js.map +0 -1
- package/dist/64.ac922cb38c3ff6c431fb.bundle.js.map +0 -1
- package/dist/65.9fcde753699dc94bea1d.bundle.js +0 -2
- package/dist/65.9fcde753699dc94bea1d.bundle.js.map +0 -1
- package/dist/66.8213a0430e7543b6d7f7.bundle.js +0 -2
- package/dist/66.8213a0430e7543b6d7f7.bundle.js.map +0 -1
- package/dist/67.320a484bc979f5076d8c.bundle.js +0 -2
- package/dist/67.320a484bc979f5076d8c.bundle.js.map +0 -1
- package/dist/68.a69e9e22327878f44dbd.bundle.js +0 -2
- package/dist/68.a69e9e22327878f44dbd.bundle.js.map +0 -1
- package/dist/69.be786580c66ac4ee18cb.bundle.js +0 -2
- package/dist/69.be786580c66ac4ee18cb.bundle.js.map +0 -1
- package/dist/7.0fd9bc389f42820382e4.bundle.js +0 -3
- package/dist/7.0fd9bc389f42820382e4.bundle.js.map +0 -1
- package/dist/70.93cfa1f02948e8276451.bundle.js +0 -2
- package/dist/70.93cfa1f02948e8276451.bundle.js.map +0 -1
- package/dist/71.6b8c8bce52a95f2da242.bundle.js +0 -2
- package/dist/71.6b8c8bce52a95f2da242.bundle.js.map +0 -1
- package/dist/72.6cbb41a38d917191c660.bundle.js +0 -2
- package/dist/72.6cbb41a38d917191c660.bundle.js.map +0 -1
- package/dist/73.801e05b4acc74a3e268c.bundle.js +0 -2
- package/dist/73.801e05b4acc74a3e268c.bundle.js.map +0 -1
- package/dist/74.1c6322e5f93d5376fd76.bundle.js +0 -2
- package/dist/74.1c6322e5f93d5376fd76.bundle.js.map +0 -1
- package/dist/75.c95c9015a30a98acb353.bundle.js +0 -2
- package/dist/75.c95c9015a30a98acb353.bundle.js.map +0 -1
- package/dist/76.29111b9618d43a0dd149.bundle.js +0 -2
- package/dist/76.29111b9618d43a0dd149.bundle.js.map +0 -1
- package/dist/77.6ced6f6e26dfe1c4e00f.bundle.js +0 -2
- package/dist/77.6ced6f6e26dfe1c4e00f.bundle.js.map +0 -1
- package/dist/78.7c7d2a0d9e7c2d2483e6.bundle.js +0 -2
- package/dist/78.7c7d2a0d9e7c2d2483e6.bundle.js.map +0 -1
- package/dist/79.696045e048461f420813.bundle.js +0 -2
- package/dist/79.696045e048461f420813.bundle.js.map +0 -1
- package/dist/8.22695f5c20dcddc1c7f9.bundle.js +0 -2
- package/dist/8.22695f5c20dcddc1c7f9.bundle.js.map +0 -1
- package/dist/80.b5e832779f88ebe839e2.bundle.js +0 -2
- package/dist/80.b5e832779f88ebe839e2.bundle.js.map +0 -1
- package/dist/81.5a0776b89463df60bd1a.bundle.js +0 -2
- package/dist/81.5a0776b89463df60bd1a.bundle.js.map +0 -1
- package/dist/82.0a98b482c7c37a9812fc.bundle.js +0 -2
- package/dist/82.0a98b482c7c37a9812fc.bundle.js.map +0 -1
- package/dist/83.8beeb651df72c23d53ac.bundle.js +0 -2
- package/dist/83.8beeb651df72c23d53ac.bundle.js.map +0 -1
- package/dist/84.6f35fe422db61d53ae3e.bundle.js +0 -2
- package/dist/84.6f35fe422db61d53ae3e.bundle.js.map +0 -1
- package/dist/85.2d1142fcbdf4c9868e94.bundle.js +0 -2
- package/dist/85.2d1142fcbdf4c9868e94.bundle.js.map +0 -1
- package/dist/86.ce91cb69963c2b84e551.bundle.js +0 -2
- package/dist/86.ce91cb69963c2b84e551.bundle.js.map +0 -1
- package/dist/87.d4aa485128cd374a11c7.bundle.js +0 -2
- package/dist/87.d4aa485128cd374a11c7.bundle.js.map +0 -1
- package/dist/88.b4cd8e99a6af1abea692.bundle.js +0 -2
- package/dist/88.b4cd8e99a6af1abea692.bundle.js.map +0 -1
- package/dist/89.8ce40cc9d5fe2596fdf9.bundle.js +0 -2
- package/dist/89.8ce40cc9d5fe2596fdf9.bundle.js.map +0 -1
- package/dist/9.d94f24c12177433d455a.bundle.js +0 -2
- package/dist/9.d94f24c12177433d455a.bundle.js.map +0 -1
- package/dist/90.94988124ca51fa46932e.bundle.js +0 -2
- package/dist/90.94988124ca51fa46932e.bundle.js.map +0 -1
- package/dist/91.bfbbacbaea095478d82e.bundle.js +0 -2
- package/dist/91.bfbbacbaea095478d82e.bundle.js.map +0 -1
- package/dist/92.791121a262e5f42a2ba2.bundle.js +0 -2
- package/dist/92.791121a262e5f42a2ba2.bundle.js.map +0 -1
- package/dist/93.7da268902b8515abecf6.bundle.js +0 -2
- package/dist/93.7da268902b8515abecf6.bundle.js.map +0 -1
- package/dist/94.88f1bd8fa645739c4f30.bundle.js +0 -2
- package/dist/94.88f1bd8fa645739c4f30.bundle.js.map +0 -1
- package/dist/95.bbd1b757de3af20f2ac1.bundle.js +0 -2
- package/dist/95.bbd1b757de3af20f2ac1.bundle.js.map +0 -1
- package/dist/96.38e7df277c99946f9a20.bundle.js +0 -2
- package/dist/96.38e7df277c99946f9a20.bundle.js.map +0 -1
- package/dist/97.1818744137f2fb66596a.bundle.js +0 -2
- package/dist/97.1818744137f2fb66596a.bundle.js.map +0 -1
- package/dist/98.1a14af46a31cf35db0e5.bundle.js +0 -2
- package/dist/98.1a14af46a31cf35db0e5.bundle.js.map +0 -1
- package/dist/99.bd486f7d738e281a0752.bundle.js +0 -2
- package/dist/99.bd486f7d738e281a0752.bundle.js.map +0 -1
- package/dist/bundle.5eeff901b77240e58d27.bundle.js +0 -89
- package/dist/bundle.5eeff901b77240e58d27.bundle.js.map +0 -1
- package/dist/css/fonts/rubik-italic.woff +0 -0
- package/dist/css/fonts/rubik-italic.woff2 +0 -0
- package/dist/css/fonts/rubik-light.woff +0 -0
- package/dist/css/fonts/rubik-light.woff2 +0 -0
- package/dist/css/fonts/rubik-lightitalic.woff +0 -0
- package/dist/css/fonts/rubik-lightitalic.woff2 +0 -0
- package/dist/css/fonts/rubik-medium.woff +0 -0
- package/dist/css/fonts/rubik-medium.woff2 +0 -0
- package/dist/css/fonts/rubik-mediumitalic.woff +0 -0
- package/dist/css/fonts/rubik-mediumitalic.woff2 +0 -0
- package/dist/css/fonts/rubik-regular.woff +0 -0
- package/dist/css/fonts/rubik-regular.woff2 +0 -0
- package/dist/css/lib/bootstrap-switch/bootstrap-switch.min.css +0 -10
- package/dist/img/graphdb-splash.2eb3f7f02aa7e25a2545459e096f3738.svg +0 -141
- package/dist/js/angular/clustermanagement/templates/modal/clone-modal.html +0 -27
- package/dist/js/lib/nvd3/nv.d3.css +0 -755
- package/dist/main.e5d47f1d0bcd23074c38.css +0 -1
- package/dist/main.f10730ef6eebe969b494.bundle.js +0 -2
- package/dist/main.f10730ef6eebe969b494.bundle.js.map +0 -1
- package/dist/pages/cluster-management/cluster-configuration.html +0 -183
- package/dist/res/swagger/css/style.css +0 -250
- package/dist/res/swagger/css/typography.css +0 -60
- package/dist/vendor.327ffd7c7997ca288654.bundle.js +0 -50
- package/dist/vendor.327ffd7c7997ca288654.bundle.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["webpack:///./src/js/lib/d3-ONTO-chord-patch.js"],"names":["d3","version","d3_arraySlice","slice","d3_array","list","call","d3_document","this","document","d3_documentElement","node","ownerDocument","documentElement","d3_window","defaultView","childNodes","nodeType","e","i","length","array","Array","Date","now","createElement","style","setProperty","error","d3_element_prototype","Element","prototype","d3_element_setAttribute","setAttribute","d3_element_setAttributeNS","setAttributeNS","d3_style_prototype","CSSStyleDeclaration","d3_style_setProperty","name","value","space","local","priority","d3_ascending","a","b","NaN","d3_number","x","d3_numeric","isNaN","d3_bisector","compare","left","lo","hi","arguments","mid","right","ascending","descending","min","f","n","max","extent","c","sum","s","mean","j","quantile","values","p","H","h","Math","floor","v","median","numbers","push","sort","variance","d","m","deviation","apply","sqrt","d3_bisect","d3_zipLength","bisectLeft","bisect","bisectRight","bisector","shuffle","i0","i1","t","random","permute","indexes","permutes","pairs","p1","zip","zips","transpose","matrix","keys","map","key","entries","merge","arrays","merged","abs","d3_range_integerScale","k","d3_class","ctor","properties","Object","defineProperty","enumerable","d3_Map","_","create","range","start","stop","step","Infinity","Error","object","forEach","set","isArray","o","d3_map_proto","d3_map_zero","d3_map_escape","d3_map_unescape","d3_map_has","d3_map_remove","d3_map_keys","d3_map_size","size","d3_map_empty","d3_Set","d3_identity","d3_rebind","target","source","method","d3_vendorSymbol","charAt","toUpperCase","d3_vendorPrefixes","prefixName","has","get","remove","empty","nest","sortValues","rollup","sortKeys","mapType","depth","keyValue","setter","valuesByKey","sortKey","keyMap","order","add","behavior","rebind","d3_noop","d3_dispatch","d3_dispatch_event","dispatch","listeners","listenerByName","event","l","z","on","listener","indexOf","concat","d3_eventPreventDefault","preventDefault","d3_eventSource","sourceEvent","d3_eventDispatch","of","thiz","argumentz","e1","e0","type","hasOwnProperty","requote","replace","d3_requote_re","d3_subclass","__proto__","property","d3_selection","groups","d3_selectionPrototype","d3_select","querySelector","d3_selectAll","querySelectorAll","d3_selectMatches","d3_selectMatcher","matches","Sizzle","matchesSelector","selection","select","d3_selection_selector","selector","d3_selection_selectorAll","subgroup","subnode","group","subgroups","parentNode","__data__","selectAll","d3_nsPrefix","svg","xhtml","xlink","xml","xmlns","d3_selection_attr","ns","qualify","removeAttributeNS","removeAttribute","d3_collapse","trim","d3_selection_classedRe","RegExp","d3_selection_classes","split","d3_selection_classed","d3_selection_classedName","re","classList","getAttribute","lastIndex","test","d3_selection_style","removeProperty","d3_selection_property","d3_selection_creator","createElementNS","namespace","namespaceURI","d3_selectionRemove","parent","removeChild","d3_selection_dataNode","data","d3_selection_filter","d3_selection_sortComparator","comparator","d3_selection_each","callback","d3_selection_enter","d3_selection_enterPrototype","prefix","attr","getAttributeNS","each","classed","contains","getComputedStyle","getPropertyValue","text","textContent","html","innerHTML","append","appendChild","insert","before","insertBefore","bind","groupData","nodeData","n0","updateNodes","enterNodes","exitNodes","nodeByKeyValue","keyValues","update","enter","exit","datum","filter","next","nextSibling","args","d3_selection_enterInsertBefore","j0","d3_selection_on","capture","wrap","d3_selection_onListener","d3_selection_onFilters","onRemove","removeEventListener","$","d3_selection_onFilter","addEventListener","match","upgroup","nodes","mouseenter","mouseleave","related","relatedTarget","compareDocumentPosition","d3_event_dragSelect","d3_event_dragId","d3_event_dragSuppress","click","w","suppressClick","off","setTimeout","mouse","container","d3_mousePoint","d3_mouse_bug44083","navigator","userAgent","changedTouches","ownerSVGElement","createSVGPoint","point","window","scrollX","scrollY","ctm","position","top","margin","padding","border","getScreenCTM","pageX","y","pageY","clientX","clientY","matrixTransform","inverse","rect","getBoundingClientRect","clientLeft","clientTop","d3_behavior_dragTouchId","identifier","touch","touches","drag","origin","mousedown","dragstart","touchstart","id","subject","move","end","dragOffset","that","dragged","dragId","dragName","dragSubject","moved","ended","dragRestore","position0","dx","dy","position1","ε","ε2","π","PI","τ","τε","halfπ","d3_radians","d3_degrees","d3_sgn","d3_cross2d","d3_acos","acos","d3_asin","asin","d3_cosh","exp","d3_haversin","sin","ρ","SQRT2","interpolateZoom","p0","S","ux0","uy0","w0","ux1","uy1","w1","d2","log","d1","b0","b1","r0","r1","coshr0","u","d3_sinh","duration","zoom","translate0","center0","center","mousewheelTimer","touchtime","x0","x1","y0","y1","view","scaleExtent","d3_behavior_zoomInfinity","zooming","mousemove","mouseup","g","mousedowned","d3_behavior_zoomWheel","mousewheeled","dblclicked","touchstarted","location","scaleTo","translateTo","zoomTo","__chart__","pow","transition","rescale","domain","invert","zoomstarted","zoomed","scale","translate","zoomended","location0","d3_selection_interrupt","scale0","locations0","distance0","zoomName","touchmove","touchend","targets","relocate","started","changed","LN2","q","l0","l1","distance1","scale1","clearTimeout","d3_behavior_zoomDelta","shiftKey","ceil","deltaY","deltaMode","wheelDelta","detail","view1","d3_transitionInheritId","tween","cx","cy","copy","d3_color","d3_hsl","d3_rgb_parse","d3_rgb_hsl","color","toString","rgb","hsl","d3_hslPrototype","d3_hsl_rgb","m1","m2","vv","round","d3_rgb","d3_hcl","d3_lab_hcl","d3_lab","d3_rgb_lab","r","brighter","darker","hcl","d3_hclPrototype","d3_hcl_lab","cos","d3_lab_K","lab","d3_lab_X","d3_lab_Y","d3_lab_Z","d3_labPrototype","d3_lab_rgb","d3_xyz_rgb","d3_lab_xyz","atan2","d3_xyz_lab","d3_rgbNumber","d3_rgbString","d3_rgbPrototype","d3_rgb_hex","format","exec","toLowerCase","parseFloat","d3_rgb_parseNumber","d3_rgb_names","parseInt","d3_rgb_xyz","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","d3_functor","d3_xhrType","response","url","mimeType","d3_xhr","xhr","headers","request","XMLHttpRequest","responseType","respond","result","status","responseText","d3_xhrHasResponse","load","XDomainRequest","onload","onerror","onreadystatechange","readyState","onprogress","progress","header","send","open","setRequestHeader","overrideMimeType","beforesend","abort","d3_xhr_fixCallback","functor","dsv","delimiter","reFormat","delimiterCode","charCodeAt","row","typedResponse","parse","formatRow","formatValue","join","parseRows","Function","JSON","stringify","eol","EOL","EOF","rows","N","I","token","formatRows","fieldSet","fields","field","csv","tsv","d3_timer_queueHead","d3_timer_queueTail","d3_timer_interval","d3_timer_timeout","d3_timer_frame","d3_timer","delay","then","timer","d3_timer_step","d3_timer_mark","d3_timer_sweep","isFinite","t0","t1","time","d3_format_precision","LN10","flush","d3_formatPrefixes","symbol","d3_locale_numberFormat","locale","locale_decimal","decimal","locale_thousands","thousands","locale_grouping","grouping","locale_currency","currency","formatGroup","width","substring","reverse","specifier","d3_format_re","fill","align","sign","zfill","comma","precision","suffix","integer","exponent","d3_format_types","d3_format_typeDefault","zcomma","fullSuffix","negative","unit","formatPrefix","after","lastIndexOf","String","fromCharCode","X","toPrecision","toExponential","toFixed","d3_time","d3_date","d3_date_utc","UTC","getDate","getUTCDate","getDay","getUTCDay","getFullYear","getUTCFullYear","getHours","getUTCHours","getMilliseconds","getUTCMilliseconds","getMinutes","getUTCMinutes","getMonth","getUTCMonth","getSeconds","getUTCSeconds","getTime","getTimezoneOffset","valueOf","setDate","d3_time_prototype","setUTCDate","setDay","setUTCDay","setFullYear","setUTCFullYear","setHours","setUTCHours","setMilliseconds","setUTCMilliseconds","setMinutes","setUTCMinutes","setMonth","setUTCMonth","setSeconds","setUTCSeconds","setTime","d3_time_interval","number","date","d0","offset","dt","times","utc","d3_time_interval_utc","d3_locale_timeFormat","locale_dateTime","dateTime","locale_date","locale_time","locale_periods","periods","locale_days","days","locale_shortDays","shortDays","locale_months","months","locale_shortMonths","shortMonths","d3_time_format","template","string","d3_time_formatPads","d3_time_formats","M","L","Z","d3_time_parse","localZ","W","U","d3_time_parsers","multi","d3_time_formatMulti","d3_time_periodLookup","d3_time_dayRe","d3_time_formatRe","d3_time_dayLookup","d3_time_formatLookup","d3_time_dayAbbrevRe","d3_time_dayAbbrevLookup","d3_time_monthRe","d3_time_monthLookup","d3_time_monthAbbrevRe","d3_time_monthAbbrevLookup","A","B","d3_time_formatPad","dayOfYear","sundayOfYear","mondayOfYear","Y","d3_time_zone","d3_time_parseDay","d3_time_parseHour24","d3_time_parseDayOfYear","d3_time_parseMilliseconds","d3_time_parseMonthNumber","d3_time_parseMinutes","d3_time_parseSeconds","d3_time_parseWeekNumberSunday","d3_time_parseWeekdayNumber","d3_time_parseWeekNumberMonday","d3_time_parseYear","d3_time_parseFullYear","d3_time_parseZone","d3_time_parseLiteralPercent","year","day","years","interval","week","sunday","weeks","weekOfYear","d3_time_numberRe","d3_time_percentRe","names","zs","zh","zm","formats","numberFormat","timeFormat","d3_locale_enUS","d3_adder","geo","d3_adderSum","d3_adderTemp","reset","bv","av","d3_geo_streamGeometry","geometry","d3_geo_streamGeometryType","stream","d3_geo_streamObjectType","Feature","feature","FeatureCollection","features","Sphere","sphere","Point","coordinates","MultiPoint","LineString","d3_geo_streamLine","MultiLineString","Polygon","d3_geo_streamPolygon","MultiPolygon","GeometryCollection","geometries","closed","coordinate","lineStart","lineEnd","polygonStart","polygonEnd","area","d3_geo_areaSum","d3_geo_area","d3_geo_centroidW0","d3_geo_centroidW1","d3_geo_centroidX0","d3_geo_centroidY0","d3_geo_centroidZ0","d3_geo_centroidX1","d3_geo_centroidY1","d3_geo_centroidZ1","d3_geo_centroidX2","d3_geo_centroidY2","d3_geo_centroidZ2","d3_geo_areaRingSum","d3_geo_areaRingStart","λ00","φ00","λ0","cosφ0","sinφ0","nextPoint","λ","φ","dλ","sdλ","adλ","cosφ","sinφ","d3_geo_cartesian","spherical","d3_geo_cartesianDot","d3_geo_cartesianCross","d3_geo_cartesianAdd","d3_geo_cartesianScale","vector","d3_geo_cartesianNormalize","d3_geo_spherical","cartesian","d3_geo_sphericalEqual","bounds","φ0","λ1","φ1","λ_","λ__","φ__","dλSum","ranges","bound","ringPoint","ringStart","ringEnd","linePoint","normal","inflection","λi","antimeridian","φi","angle","compareRanges","withinRange","best","centroid","d3_geo_centroid","d3_geo_centroidPoint","d3_geo_centroidLineStart","d3_geo_centroidLineEnd","d3_geo_centroidRingStart","d3_geo_centroidPointXYZ","z0","cz","d3_geo_compose","compose","d3_true","d3_geo_clipPolygon","segments","clipStartInside","interpolate","clip","segment","d3_geo_clipPolygonIntersection","d3_geo_clipPolygonLinkCircular","entry","points","current","isSubject","other","d3_geo_clip","pointVisible","clipLine","clipStart","rotate","line","rotatedClipStart","pointRing","polygon","meridian","parallel","meridianNormal","polarAngle","winding","ring","point0","arc","intersection","φarc","d3_geo_pointInPolygon","polygonStarted","d3_geo_clipSort","pointLine","buffer","d3_geo_clipBufferListener","ringListener","clean","ringSegments","pop","shift","d3_geo_clipSegmentLength1","lines","rejoin","d3_geo_clipAntimeridian","sλ0","sλ1","cosφ1","sinλ0_λ1","atan","d3_geo_clipAntimeridianIntersect","from","to","direction","d3_geo_clipCircle","radius","cr","smallRadius","notHemisphere","visible","c0","v0","v00","point2","point1","code","intersect","d3_geo_circleInterpolate","two","n1","n2","n2n2","n1n2","determinant","c1","c2","n1xn2","uu","t2","δλ","polar","q1","d3_geom_clipLine","ax","ay","d3_geo_clipExtentMAX","d3_geo_clipExtent","x__","y__","v__","x_","y_","v_","first","listener_","bufferListener","wn","insidePolygon","inside","a1","corner","comparePoints","ca","cb","d3_geo_conic","projectAt","d3_geo_projectionMutator","parallels","d3_geo_conicEqualArea","C","ρ0","forward","ρ0_y","clipExtent","output","valid","conicEqualArea","raw","albers","albersUsa","lower48Point","alaskaPoint","hawaiiPoint","lower48","alaska","hawaii","pointStream","lower48Stream","alaskaStream","hawaiiStream","d3_geo_pathAreaSum","d3_geo_pathAreaPolygon","d3_geo_pathBoundsX0","d3_geo_pathBoundsY0","d3_geo_pathBoundsX1","d3_geo_pathBoundsY1","d3_geo_pathArea","d3_geo_pathAreaRingStart","x00","y00","d3_geo_pathBounds","d3_geo_pathBuffer","pointCircle","d3_geo_pathBufferCircle","pointLineStart","lineEndPolygon","pointRadius","d3_geo_lengthSum","d3_geo_pathCentroid","d3_geo_pathCentroidPoint","d3_geo_pathCentroidLineStart","d3_geo_pathCentroidLineEnd","d3_geo_pathCentroidRingStart","d3_geo_pathContext","context","moveTo","lineTo","closePath","d3_geo_resample","project","δ2","cosMinDistance","maxDepth","resample","resampleRecursive","resampleNone","d3_geo_transformPoint","a00","b00","c00","a0","resampleLineTo","φ2","λ2","x2","y2","dx2","dy2","dz","d3_geo_pathProjectStream","d3_geo_projectionRadians","d3_geo_transform","d3_geo_projection","projectRotate","δx","δy","projectResample","δφ","δγ","preclip","postclip","clipAngle","projection","d3_geo_rotation","invalidate","d3_geo_equirectangular","d3_geo_identityRotation","d3_geo_rotationλ","d3_geo_rotationφγ","d3_geo_forwardRotationλ","rotation","cosδφ","sinδφ","cosδγ","sinδγ","sr","d3_geo_circleAngle","d3_geo_graticuleX","d3_geo_graticuleY","d3_source","d3_target","path","projectStream","contextStream","cacheStream","transform","methods","projectionMutator","equirectangular","circle","distance","Δλ","sinΔλ","cosΔλ","sinφ1","graticule","X1","X0","Y1","Y0","DX","DY","outline","majorExtent","minorExtent","majorStep","minorStep","greatArc","source_","target_","cy0","sy0","cy1","sy1","kx0","ky0","kx1","ky1","d3_geo_length","d3_geo_azimuthal","azimuthal","cosλ","sinc","cosc","d3_geo_azimuthalEqualArea","cosλcosφ","azimuthalEqualArea","d3_geo_azimuthalEquidistant","d3_geo_conicConformal","F","d3_geo_mercator","d3_geo_conicEquidistant","G","azimuthalEquidistant","conicConformal","conicEquidistant","d3_geo_gnomonic","d3_geo_mercatorProjection","clipAuto","gnomonic","mercator","d3_geo_orthographic","orthographic","d3_geo_stereographic","d3_geo_transverseMercator","d3_geom_pointX","d3_geom_pointY","d3_geom_hullUpper","hull","hs","d3_geom_hullOrder","stereographic","transverseMercator","geom","vertices","fx","fy","flippedPoints","upper","lower","skipLeft","skipRight","d3_geom_polygonPrototype","d3_geom_polygonInside","d3_geom_polygonIntersect","x3","x21","x43","y3","y21","y43","ua","d3_geom_polygonClosed","input","d3_geom_voronoiEdges","d3_geom_voronoiCells","d3_geom_voronoiBeaches","d3_geom_voronoiFirstCircle","d3_geom_voronoiCircles","d3_geom_voronoiBeachPool","d3_geom_voronoiCirclePool","d3_geom_voronoiBeach","d3_geom_voronoiRedBlackNode","edge","site","d3_geom_voronoiCreateBeach","beach","d3_geom_voronoiDetachBeach","d3_geom_voronoiDetachCircle","d3_geom_voronoiRemoveBeach","vertex","previous","P","disappearing","lArc","unshift","rArc","iArc","nArcs","d3_geom_voronoiSetEdgeEnd","d3_geom_voronoiCreateEdge","d3_geom_voronoiAttachCircle","d3_geom_voronoiAddBeach","dxl","dxr","directrix","d3_geom_voronoiLeftBreakPoint","d3_geom_voronoiRightBreakPoint","R","newArc","lSite","bx","by","rSite","hb","hc","rfocx","rfocy","pby2","lfocx","lfocy","plby2","hl","aby2","d3_geom_voronoiCell","edges","d3_geom_voronoiHalfEdgeOrder","d3_geom_voronoiCircle","cSite","ha","d3_geom_voronoiConnectEdge","vb","fm","fb","va","lx","ly","rx","ry","d3_geom_voronoiEdge","d3_geom_voronoiHalfEdge","d3_geom_voronoiCreateBorderEdge","d3_geom_voronoiRedBlackTree","d3_geom_voronoiRedBlackRotateLeft","tree","d3_geom_voronoiRedBlackRotateRight","d3_geom_voronoiRedBlackFirst","d3_geom_voronoi","sites","bbox","d3_geom_voronoiVertexOrder","splice","d3_geom_voronoiClipEdges","cell","iHalfEdge","halfEdges","nHalfEdges","cells","iCell","prepare","d3_geom_voronoiCloseCells","diagram","grandpa","uncle","sibling","voronoi","d3_geom_voronoiClipExtent","polygons","links","triangles","s0","s1","d3_geom_quadtreeCompatX","d3_geom_quadtreeCompatY","d3_geom_quadtreeVisit","sx","sy","children","d3_geom_quadtreeFind","root","closestPoint","minDistance2","find","distance2","xm","ym","d3_interpolateRgb","ar","ag","ab","br","bg","bb","d3_interpolateObject","d3_interpolate","d3_interpolateNumber","d3_interpolateString","am","bm","bs","bi","d3_interpolate_numberA","d3_interpolate_numberB","index","delaunay","quadtree","compat","xs","ys","x1_","y1_","x2_","y2_","leaf","nx","ny","insertChild","nPoint","below","interpolateRgb","interpolateObject","interpolateNumber","interpolateString","interpolators","d3_interpolateArray","na","nb","interpolateArray","d3_ease_default","d3_ease","linear","poly","quad","d3_ease_quad","cubic","d3_ease_cubic","d3_ease_sin","d3_ease_exp","d3_ease_circle","elastic","back","bounce","d3_ease_bounce","d3_ease_mode","out","d3_ease_reverse","d3_ease_reflect","d3_ease_clamp","d3_ease_cubicInOut","t3","d3_interpolateRound","d3_transform","kx","d3_transformNormalize","kz","d3_transformDot","ky","skew","ease","interpolateHcl","ah","ac","al","bh","bc","bl","interpolateHsl","as","interpolateHslLong","interpolateLab","aa","ba","interpolateRound","baseVal","consolidate","d3_transformIdentity","d3_interpolateTransformPop","d3_interpolateTransform","ta","tb","d3_interpolateTranslate","ra","rb","d3_interpolateRotate","wa","wb","d3_interpolateSkew","ka","kb","d3_interpolateScale","d3_uninterpolateNumber","d3_uninterpolateClamp","d3_layout_bundlePath","link","lca","aNodes","d3_layout_bundleAncestors","bNodes","aNode","bNode","sharedNode","d3_layout_bundleLeastCommonAncestor","ancestors","d3_layout_forceDragstart","fixed","d3_layout_forceDragend","d3_layout_forceMouseover","px","py","d3_layout_forceMouseout","interpolateTransform","layout","bundle","paths","chord","chords","sortGroups","sortSubgroups","sortChords","relayout","groupSums","groupIndex","subgroupIndex","di","dj","subindex","startAngle","endAngle","resort","force","alpha","distances","strengths","charges","friction","linkDistance","d3_layout_forceLinkDistance","linkStrength","d3_layout_forceLinkStrength","charge","chargeDistance2","d3_layout_forceChargeDistance2","gravity","theta2","repulse","dw","dn","pointCharge","dragmove","resume","tick","weight","d3_layout_forceAccumulate","visit","chargeDistance","theta","neighbors","dimension","candidates","d3_layout_hierarchyRebind","hierarchy","d3_layout_hierarchyLinks","d3_layout_hierarchyVisitBefore","d3_layout_hierarchyVisitAfter","nodes2","d3_layout_hierarchyChildren","d3_layout_hierarchyValue","d3_layout_hierarchySort","child","stack","childs","revalue","partition","pie","Number","d3_layout_pieSortByValue","padAngle","da","pa","arcs","d3_layout_stackX","d3_layout_stackY","d3_layout_stackOut","d3_layout_stackOrderDefault","d3_layout_stackOffsetZero","series","orders","offsets","d3_layout_stackOrders","d3_layout_stackOffsets","d3_layout_stackMaxIndex","sums","d3_layout_stackReduceSum","bottom","tops","bottoms","silhouette","wiggle","s2","s3","o0","expand","zero","reduce","d3_layout_stackSum","d3_layout_histogramBinSturges","d3_layout_histogramBinFixed","d3_layout_histogramRange","d3_layout_packSort","d3_layout_packInsert","_pack_next","_pack_prev","d3_layout_packSplice","d3_layout_packIntersects","dr","d3_layout_packSiblings","xMin","xMax","yMin","yMax","d3_layout_packLink","d3_layout_packPlace","isect","d3_layout_packUnlink","db","dc","d3_layout_treeSeparation","d3_layout_treeLeft","d3_layout_treeRight","d3_layout_treeMove","wm","wp","change","d3_layout_treeAncestor","vim","ancestor","d3_layout_treemapPadNull","d3_layout_treemapPad","d3_scaleExtent","d3_scaleRange","rangeExtent","d3_scale_bilinear","uninterpolate","d3_scale_nice","nice","d3_scale_niceStep","d3_scale_niceIdentity","histogram","frequency","valuer","ranger","binner","bin","bins","thresholds","pack","d3_layout_packTransform","separation","nodeSize","root0","root1","node1","queue","wrapTree","firstWalk","secondWalk","sizeNode","tx","siblings","d3_layout_treeShift","midpoint","vip","vop","vom","sip","sop","sim","som","apportion","cluster","previousNode","d3_layout_clusterX","d3_layout_clusterY","d3_layout_clusterLeft","d3_layout_clusterRight","treemap","stickies","pad","sticky","mode","ratio","squarify","score","remaining","worst","stickify","rmax","rmin","padFunction","padConstant","µ","σ","logNormal","bates","irwinHall","d3_scale_polylinear","d3_scale_linearRebind","d3_scale_linearNice","d3_scale_linearTickRange","span","err","d3_scale_linearTicks","d3_scale_linearTickFormat","d3_scale_linearPrecision","d3_scale_linearFormatSignificant","d3_scale_linearFormatPrecision","d3_scale_linear","clamp","rangeRound","ticks","tickFormat","d3_scale_log","base","positive","niced","d3_scale_logNiceNegative","d3_scale_logFormat","d3_scale_powPow","d3_scale_pow","powp","powb","ordinal","d3_scale_ordinal","rangeBand","steps","xi","rangePoints","rangeRoundPoints","rangeBands","outerPadding","rangeRoundBands","category10","d3_category10","category20","d3_category20","category20b","d3_category20b","category20c","d3_category20c","d3_zero","d3_scale_quantile","quantiles","invertExtent","quantize","d3_scale_quantize","threshold","d3_scale_threshold","identity","d3_scale_identity","innerRadius","d3_svg_arcInnerRadius","outerRadius","d3_svg_arcOuterRadius","cornerRadius","padRadius","d3_svg_arcAuto","d3_svg_arcStartAngle","d3_svg_arcEndAngle","d3_svg_arcPadAngle","cw","rc","circleSegment","rp","ap","d3_svg_arcSweep","h1","h0","rc1","rc0","oc","kc","lc","t30","d3_svg_arcCornerTangents","t12","t03","t21","x01","y01","ox","oy","D","cx0","cx1","dx0","dy0","dx1","dy1","d3_svg_line","defined","d3_svg_lineLinear","interpolateKey","tension","d3_svg_lineInterpolators","d3_svg_lineLinearClosed","d3_svg_lineStepBefore","d3_svg_lineStepAfter","basis","d3_svg_lineBasis","pi","d3_svg_lineDot4","d3_svg_lineBasisBezier3","d3_svg_lineBasisBezier","cardinal","d3_svg_lineHermite","d3_svg_lineCardinalTangents","monotone","tangents","d3_svg_lineSlope","d3_svg_lineFiniteDifferences","d3_svg_lineMonotoneTangents","lp","p2","d3_svg_lineBasisBezier1","d3_svg_lineBasisBezier2","d3_svg_lineRadial","d3_svg_area","interpolateReverse","points0","points1","fx0","fy0","fx1","fy1","d3_svg_chordRadius","d3_svg_diagonalProjection","d3_svg_diagonalRadialProjection","d3_svg_symbolSize","d3_svg_symbolType","d3_svg_symbolCircle","radial","renderArc","sGr","curve","self","diagonal","p3","projection_","d3_svg_symbols","cross","diamond","d3_svg_symbolTan30","square","d3_svg_symbolSqrt3","symbolTypes","d3_transitionId","d3_transitionNamespace","d3_transitionInherit","d3_transitionNode","d3_transition","interrupt","d3_selection_interruptNS","lock","activeId","active","count","d3_transitionPrototype","d3_transition_tween","d3_transition_text","inherit","tweens","elapsed","cancelId","cancel","subnodes","nameNS","attrNull","attrNullNS","attrTween","attrTweenNS","styleNull","styleString","styleTween","inheritId","id0","id1","axis","tickFormat_","orient","d3_svg_axisDefaultOrient","innerTickSize","outerTickSize","tickPadding","tickArguments_","tickValues","tickTransform","tickEnter","tickExit","tickUpdate","tickSpacing","pathUpdate","lineEnter","lineUpdate","textEnter","textUpdate","d3_svg_axisX","d3_svg_axisY","d3_svg_axisOrients","tickSize","tickSubdivide","brush","xExtentDomain","yExtentDomain","xExtent","yExtent","xClamp","yClamp","resizes","d3_svg_brushResizes","brushstart","background","resize","d3_svg_brushCursor","gUpdate","backgroundUpdate","redrawX","redrawY","redraw","eventTarget","event_","resizing","resizingX","resizingY","dragging","keyCode","brushmove","brushend","ex","ey","altKey","move1","extent1","extent0","yi","clear","nw","ne","se","sw","d3_time_formatUtc","d3_time_formatIso","d3_time_formatIsoNative","toISOString","d3_time_scale","tickMethod","d3_time_scaleSteps","d3_time_scaleMilliseconds","d3_time_scaleDate","skip","skipped","iso","second","seconds","minute","minutes","hour","timezone","hours","month","d3_time_scaleLocalMethods","d3_time_scaleLocalFormat","d3_time_scaleUtcMethods","d3_time_scaleUtcFormat","d3_json","d3_html","createRange","selectNode","body","createContextualFragment","json","responseXML"],"mappings":"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","file":"2.fb2f97f5c543a24296f6.bundle.js","sourcesContent":["!function() {\n var d3 = {\n version: \"3.5.12\"\n };\n var d3_arraySlice = [].slice, d3_array = function(list) {\n return d3_arraySlice.call(list);\n };\n var d3_document = this.document;\n function d3_documentElement(node) {\n return node && (node.ownerDocument || node.document || node).documentElement;\n }\n function d3_window(node) {\n return node && (node.ownerDocument && node.ownerDocument.defaultView || node.document && node || node.defaultView);\n }\n if (d3_document) {\n try {\n d3_array(d3_document.documentElement.childNodes)[0].nodeType;\n } catch (e) {\n d3_array = function(list) {\n var i = list.length, array = new Array(i);\n while (i--) array[i] = list[i];\n return array;\n };\n }\n }\n if (!Date.now) Date.now = function() {\n return +new Date();\n };\n if (d3_document) {\n try {\n d3_document.createElement(\"DIV\").style.setProperty(\"opacity\", 0, \"\");\n } catch (error) {\n var d3_element_prototype = this.Element.prototype, d3_element_setAttribute = d3_element_prototype.setAttribute, d3_element_setAttributeNS = d3_element_prototype.setAttributeNS, d3_style_prototype = this.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty;\n d3_element_prototype.setAttribute = function(name, value) {\n d3_element_setAttribute.call(this, name, value + \"\");\n };\n d3_element_prototype.setAttributeNS = function(space, local, value) {\n d3_element_setAttributeNS.call(this, space, local, value + \"\");\n };\n d3_style_prototype.setProperty = function(name, value, priority) {\n d3_style_setProperty.call(this, name, value + \"\", priority);\n };\n }\n }\n d3.ascending = d3_ascending;\n function d3_ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n }\n d3.descending = function(a, b) {\n return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;\n };\n d3.min = function(array, f) {\n var i = -1, n = array.length, a, b;\n if (arguments.length === 1) {\n while (++i < n) if ((b = array[i]) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = array[i]) != null && a > b) a = b;\n } else {\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;\n }\n return a;\n };\n d3.max = function(array, f) {\n var i = -1, n = array.length, a, b;\n if (arguments.length === 1) {\n while (++i < n) if ((b = array[i]) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = array[i]) != null && b > a) a = b;\n } else {\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n a = b;\n break;\n }\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;\n }\n return a;\n };\n d3.extent = function(array, f) {\n var i = -1, n = array.length, a, b, c;\n if (arguments.length === 1) {\n while (++i < n) if ((b = array[i]) != null && b >= b) {\n a = c = b;\n break;\n }\n while (++i < n) if ((b = array[i]) != null) {\n if (a > b) a = b;\n if (c < b) c = b;\n }\n } else {\n while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {\n a = c = b;\n break;\n }\n while (++i < n) if ((b = f.call(array, array[i], i)) != null) {\n if (a > b) a = b;\n if (c < b) c = b;\n }\n }\n return [ a, c ];\n };\n function d3_number(x) {\n return x === null ? NaN : +x;\n }\n function d3_numeric(x) {\n return !isNaN(x);\n }\n d3.sum = function(array, f) {\n var s = 0, n = array.length, a, i = -1;\n if (arguments.length === 1) {\n while (++i < n) if (d3_numeric(a = +array[i])) s += a;\n } else {\n while (++i < n) if (d3_numeric(a = +f.call(array, array[i], i))) s += a;\n }\n return s;\n };\n d3.mean = function(array, f) {\n var s = 0, n = array.length, a, i = -1, j = n;\n if (arguments.length === 1) {\n while (++i < n) if (d3_numeric(a = d3_number(array[i]))) s += a; else --j;\n } else {\n while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) s += a; else --j;\n }\n if (j) return s / j;\n };\n d3.quantile = function(values, p) {\n var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h;\n return e ? v + e * (values[h] - v) : v;\n };\n d3.median = function(array, f) {\n var numbers = [], n = array.length, a, i = -1;\n if (arguments.length === 1) {\n while (++i < n) if (d3_numeric(a = d3_number(array[i]))) numbers.push(a);\n } else {\n while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) numbers.push(a);\n }\n if (numbers.length) return d3.quantile(numbers.sort(d3_ascending), .5);\n };\n d3.variance = function(array, f) {\n var n = array.length, m = 0, a, d, s = 0, i = -1, j = 0;\n if (arguments.length === 1) {\n while (++i < n) {\n if (d3_numeric(a = d3_number(array[i]))) {\n d = a - m;\n m += d / ++j;\n s += d * (a - m);\n }\n }\n } else {\n while (++i < n) {\n if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) {\n d = a - m;\n m += d / ++j;\n s += d * (a - m);\n }\n }\n }\n if (j > 1) return s / (j - 1);\n };\n d3.deviation = function() {\n var v = d3.variance.apply(this, arguments);\n return v ? Math.sqrt(v) : v;\n };\n function d3_bisector(compare) {\n return {\n left: function(a, x, lo, hi) {\n if (arguments.length < 3) lo = 0;\n if (arguments.length < 4) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (arguments.length < 3) lo = 0;\n if (arguments.length < 4) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1;\n }\n return lo;\n }\n };\n }\n var d3_bisect = d3_bisector(d3_ascending);\n d3.bisectLeft = d3_bisect.left;\n d3.bisect = d3.bisectRight = d3_bisect.right;\n d3.bisector = function(f) {\n return d3_bisector(f.length === 1 ? function(d, x) {\n return d3_ascending(f(d), x);\n } : f);\n };\n d3.shuffle = function(array, i0, i1) {\n if ((m = arguments.length) < 3) {\n i1 = array.length;\n if (m < 2) i0 = 0;\n }\n var m = i1 - i0, t, i;\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m + i0], array[m + i0] = array[i + i0], array[i + i0] = t;\n }\n return array;\n };\n d3.permute = function(array, indexes) {\n var i = indexes.length, permutes = new Array(i);\n while (i--) permutes[i] = array[indexes[i]];\n return permutes;\n };\n d3.pairs = function(array) {\n var i = 0, n = array.length - 1, p0, p1 = array[0], pairs = new Array(n < 0 ? 0 : n);\n while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ];\n return pairs;\n };\n d3.zip = function() {\n if (!(n = arguments.length)) return [];\n for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m; ) {\n for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n; ) {\n zip[j] = arguments[j][i];\n }\n }\n return zips;\n };\n function d3_zipLength(d) {\n return d.length;\n }\n d3.transpose = function(matrix) {\n return d3.zip.apply(d3, matrix);\n };\n d3.keys = function(map) {\n var keys = [];\n for (var key in map) keys.push(key);\n return keys;\n };\n d3.values = function(map) {\n var values = [];\n for (var key in map) values.push(map[key]);\n return values;\n };\n d3.entries = function(map) {\n var entries = [];\n for (var key in map) entries.push({\n key: key,\n value: map[key]\n });\n return entries;\n };\n d3.merge = function(arrays) {\n var n = arrays.length, m, i = -1, j = 0, merged, array;\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n return merged;\n };\n var abs = Math.abs;\n d3.range = function(start, stop, step) {\n if (arguments.length < 3) {\n step = 1;\n if (arguments.length < 2) {\n stop = start;\n start = 0;\n }\n }\n if ((stop - start) / step === Infinity) throw new Error(\"infinite range\");\n var range = [], k = d3_range_integerScale(abs(step)), i = -1, j;\n start *= k, stop *= k, step *= k;\n if (step < 0) while ((j = start + step * ++i) > stop) range.push(j / k); else while ((j = start + step * ++i) < stop) range.push(j / k);\n return range;\n };\n function d3_range_integerScale(x) {\n var k = 1;\n while (x * k % 1) k *= 10;\n return k;\n }\n function d3_class(ctor, properties) {\n for (var key in properties) {\n Object.defineProperty(ctor.prototype, key, {\n value: properties[key],\n enumerable: false\n });\n }\n }\n d3.map = function(object, f) {\n var map = new d3_Map();\n if (object instanceof d3_Map) {\n object.forEach(function(key, value) {\n map.set(key, value);\n });\n } else if (Array.isArray(object)) {\n var i = -1, n = object.length, o;\n if (arguments.length === 1) while (++i < n) map.set(i, object[i]); else while (++i < n) map.set(f.call(object, o = object[i], i), o);\n } else {\n for (var key in object) map.set(key, object[key]);\n }\n return map;\n };\n function d3_Map() {\n this._ = Object.create(null);\n }\n var d3_map_proto = \"__proto__\", d3_map_zero = \"\\x00\";\n d3_class(d3_Map, {\n has: d3_map_has,\n get: function(key) {\n return this._[d3_map_escape(key)];\n },\n set: function(key, value) {\n return this._[d3_map_escape(key)] = value;\n },\n remove: d3_map_remove,\n keys: d3_map_keys,\n values: function() {\n var values = [];\n for (var key in this._) values.push(this._[key]);\n return values;\n },\n entries: function() {\n var entries = [];\n for (var key in this._) entries.push({\n key: d3_map_unescape(key),\n value: this._[key]\n });\n return entries;\n },\n size: d3_map_size,\n empty: d3_map_empty,\n forEach: function(f) {\n for (var key in this._) f.call(this, d3_map_unescape(key), this._[key]);\n }\n });\n function d3_map_escape(key) {\n return (key += \"\") === d3_map_proto || key[0] === d3_map_zero ? d3_map_zero + key : key;\n }\n function d3_map_unescape(key) {\n return (key += \"\")[0] === d3_map_zero ? key.slice(1) : key;\n }\n function d3_map_has(key) {\n return d3_map_escape(key) in this._;\n }\n function d3_map_remove(key) {\n return (key = d3_map_escape(key)) in this._ && delete this._[key];\n }\n function d3_map_keys() {\n var keys = [];\n for (var key in this._) keys.push(d3_map_unescape(key));\n return keys;\n }\n function d3_map_size() {\n var size = 0;\n for (var key in this._) ++size;\n return size;\n }\n function d3_map_empty() {\n for (var key in this._) return false;\n return true;\n }\n d3.nest = function() {\n var nest = {}, keys = [], sortKeys = [], sortValues, rollup;\n function map(mapType, array, depth) {\n if (depth >= keys.length) return rollup ? rollup.call(nest, array) : sortValues ? array.sort(sortValues) : array;\n var i = -1, n = array.length, key = keys[depth++], keyValue, object, setter, valuesByKey = new d3_Map(), values;\n while (++i < n) {\n if (values = valuesByKey.get(keyValue = key(object = array[i]))) {\n values.push(object);\n } else {\n valuesByKey.set(keyValue, [ object ]);\n }\n }\n if (mapType) {\n object = mapType();\n setter = function(keyValue, values) {\n object.set(keyValue, map(mapType, values, depth));\n };\n } else {\n object = {};\n setter = function(keyValue, values) {\n object[keyValue] = map(mapType, values, depth);\n };\n }\n valuesByKey.forEach(setter);\n return object;\n }\n function entries(map, depth) {\n if (depth >= keys.length) return map;\n var array = [], sortKey = sortKeys[depth++];\n map.forEach(function(key, keyMap) {\n array.push({\n key: key,\n values: entries(keyMap, depth)\n });\n });\n return sortKey ? array.sort(function(a, b) {\n return sortKey(a.key, b.key);\n }) : array;\n }\n nest.map = function(array, mapType) {\n return map(mapType, array, 0);\n };\n nest.entries = function(array) {\n return entries(map(d3.map, array, 0), 0);\n };\n nest.key = function(d) {\n keys.push(d);\n return nest;\n };\n nest.sortKeys = function(order) {\n sortKeys[keys.length - 1] = order;\n return nest;\n };\n nest.sortValues = function(order) {\n sortValues = order;\n return nest;\n };\n nest.rollup = function(f) {\n rollup = f;\n return nest;\n };\n return nest;\n };\n d3.set = function(array) {\n var set = new d3_Set();\n if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]);\n return set;\n };\n function d3_Set() {\n this._ = Object.create(null);\n }\n d3_class(d3_Set, {\n has: d3_map_has,\n add: function(key) {\n this._[d3_map_escape(key += \"\")] = true;\n return key;\n },\n remove: d3_map_remove,\n values: d3_map_keys,\n size: d3_map_size,\n empty: d3_map_empty,\n forEach: function(f) {\n for (var key in this._) f.call(this, d3_map_unescape(key));\n }\n });\n d3.behavior = {};\n function d3_identity(d) {\n return d;\n }\n d3.rebind = function(target, source) {\n var i = 1, n = arguments.length, method;\n while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]);\n return target;\n };\n function d3_rebind(target, source, method) {\n return function() {\n var value = method.apply(source, arguments);\n return value === source ? target : value;\n };\n }\n function d3_vendorSymbol(object, name) {\n if (name in object) return name;\n name = name.charAt(0).toUpperCase() + name.slice(1);\n for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) {\n var prefixName = d3_vendorPrefixes[i] + name;\n if (prefixName in object) return prefixName;\n }\n }\n var d3_vendorPrefixes = [ \"webkit\", \"ms\", \"moz\", \"Moz\", \"o\", \"O\" ];\n function d3_noop() {}\n d3.dispatch = function() {\n var dispatch = new d3_dispatch(), i = -1, n = arguments.length;\n while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);\n return dispatch;\n };\n function d3_dispatch() {}\n d3_dispatch.prototype.on = function(type, listener) {\n var i = type.indexOf(\".\"), name = \"\";\n if (i >= 0) {\n name = type.slice(i + 1);\n type = type.slice(0, i);\n }\n if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener);\n if (arguments.length === 2) {\n if (listener == null) for (type in this) {\n if (this.hasOwnProperty(type)) this[type].on(name, null);\n }\n return this;\n }\n };\n function d3_dispatch_event(dispatch) {\n var listeners = [], listenerByName = new d3_Map();\n function event() {\n var z = listeners, i = -1, n = z.length, l;\n while (++i < n) if (l = z[i].on) l.apply(this, arguments);\n return dispatch;\n }\n event.on = function(name, listener) {\n var l = listenerByName.get(name), i;\n if (arguments.length < 2) return l && l.on;\n if (l) {\n l.on = null;\n listeners = listeners.slice(0, i = listeners.indexOf(l)).concat(listeners.slice(i + 1));\n listenerByName.remove(name);\n }\n if (listener) listeners.push(listenerByName.set(name, {\n on: listener\n }));\n return dispatch;\n };\n return event;\n }\n d3.event = null;\n function d3_eventPreventDefault() {\n d3.event.preventDefault();\n }\n function d3_eventSource() {\n var e = d3.event, s;\n while (s = e.sourceEvent) e = s;\n return e;\n }\n function d3_eventDispatch(target) {\n var dispatch = new d3_dispatch(), i = 0, n = arguments.length;\n while (++i < n) dispatch[arguments[i]] = d3_dispatch_event(dispatch);\n dispatch.of = function(thiz, argumentz) {\n return function(e1) {\n try {\n var e0 = e1.sourceEvent = d3.event;\n e1.target = target;\n d3.event = e1;\n dispatch[e1.type].apply(thiz, argumentz);\n } finally {\n d3.event = e0;\n }\n };\n };\n return dispatch;\n }\n d3.requote = function(s) {\n return s.replace(d3_requote_re, \"\\\\$&\");\n };\n var d3_requote_re = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n var d3_subclass = {}.__proto__ ? function(object, prototype) {\n object.__proto__ = prototype;\n } : function(object, prototype) {\n for (var property in prototype) object[property] = prototype[property];\n };\n function d3_selection(groups) {\n d3_subclass(groups, d3_selectionPrototype);\n return groups;\n }\n var d3_select = function(s, n) {\n return n.querySelector(s);\n }, d3_selectAll = function(s, n) {\n return n.querySelectorAll(s);\n }, d3_selectMatches = function(n, s) {\n var d3_selectMatcher = n.matches || n[d3_vendorSymbol(n, \"matchesSelector\")];\n d3_selectMatches = function(n, s) {\n return d3_selectMatcher.call(n, s);\n };\n return d3_selectMatches(n, s);\n };\n if (typeof Sizzle === \"function\") {\n d3_select = function(s, n) {\n return Sizzle(s, n)[0] || null;\n };\n d3_selectAll = Sizzle;\n d3_selectMatches = Sizzle.matchesSelector;\n }\n d3.selection = function() {\n return d3.select(d3_document.documentElement);\n };\n var d3_selectionPrototype = d3.selection.prototype = [];\n d3_selectionPrototype.select = function(selector) {\n var subgroups = [], subgroup, subnode, group, node;\n selector = d3_selection_selector(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n subgroups.push(subgroup = []);\n subgroup.parentNode = (group = this[j]).parentNode;\n for (var i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n subgroup.push(subnode = selector.call(node, node.__data__, i, j));\n if (subnode && \"__data__\" in node) subnode.__data__ = node.__data__;\n } else {\n subgroup.push(null);\n }\n }\n }\n return d3_selection(subgroups);\n };\n function d3_selection_selector(selector) {\n return typeof selector === \"function\" ? selector : function() {\n return d3_select(selector, this);\n };\n }\n d3_selectionPrototype.selectAll = function(selector) {\n var subgroups = [], subgroup, node;\n selector = d3_selection_selectorAll(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n subgroups.push(subgroup = d3_array(selector.call(node, node.__data__, i, j)));\n subgroup.parentNode = node;\n }\n }\n }\n return d3_selection(subgroups);\n };\n function d3_selection_selectorAll(selector) {\n return typeof selector === \"function\" ? selector : function() {\n return d3_selectAll(selector, this);\n };\n }\n var d3_nsPrefix = {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: \"http://www.w3.org/1999/xhtml\",\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n };\n d3.ns = {\n prefix: d3_nsPrefix,\n qualify: function(name) {\n var i = name.indexOf(\":\"), prefix = name;\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return d3_nsPrefix.hasOwnProperty(prefix) ? {\n space: d3_nsPrefix[prefix],\n local: name\n } : name;\n }\n };\n d3_selectionPrototype.attr = function(name, value) {\n if (arguments.length < 2) {\n if (typeof name === \"string\") {\n var node = this.node();\n name = d3.ns.qualify(name);\n return name.local ? node.getAttributeNS(name.space, name.local) : node.getAttribute(name);\n }\n for (value in name) this.each(d3_selection_attr(value, name[value]));\n return this;\n }\n return this.each(d3_selection_attr(name, value));\n };\n function d3_selection_attr(name, value) {\n name = d3.ns.qualify(name);\n function attrNull() {\n this.removeAttribute(name);\n }\n function attrNullNS() {\n this.removeAttributeNS(name.space, name.local);\n }\n function attrConstant() {\n this.setAttribute(name, value);\n }\n function attrConstantNS() {\n this.setAttributeNS(name.space, name.local, value);\n }\n function attrFunction() {\n var x = value.apply(this, arguments);\n if (x == null) this.removeAttribute(name); else this.setAttribute(name, x);\n }\n function attrFunctionNS() {\n var x = value.apply(this, arguments);\n if (x == null) this.removeAttributeNS(name.space, name.local); else this.setAttributeNS(name.space, name.local, x);\n }\n return value == null ? name.local ? attrNullNS : attrNull : typeof value === \"function\" ? name.local ? attrFunctionNS : attrFunction : name.local ? attrConstantNS : attrConstant;\n }\n function d3_collapse(s) {\n return s.trim().replace(/\\s+/g, \" \");\n }\n d3_selectionPrototype.classed = function(name, value) {\n if (arguments.length < 2) {\n if (typeof name === \"string\") {\n var node = this.node(), n = (name = d3_selection_classes(name)).length, i = -1;\n if (value = node.classList) {\n while (++i < n) if (!value.contains(name[i])) return false;\n } else {\n value = node.getAttribute(\"class\");\n while (++i < n) if (!d3_selection_classedRe(name[i]).test(value)) return false;\n }\n return true;\n }\n for (value in name) this.each(d3_selection_classed(value, name[value]));\n return this;\n }\n return this.each(d3_selection_classed(name, value));\n };\n function d3_selection_classedRe(name) {\n return new RegExp(\"(?:^|\\\\s+)\" + d3.requote(name) + \"(?:\\\\s+|$)\", \"g\");\n }\n function d3_selection_classes(name) {\n return (name + \"\").trim().split(/^|\\s+/);\n }\n function d3_selection_classed(name, value) {\n name = d3_selection_classes(name).map(d3_selection_classedName);\n var n = name.length;\n function classedConstant() {\n var i = -1;\n while (++i < n) name[i](this, value);\n }\n function classedFunction() {\n var i = -1, x = value.apply(this, arguments);\n while (++i < n) name[i](this, x);\n }\n return typeof value === \"function\" ? classedFunction : classedConstant;\n }\n function d3_selection_classedName(name) {\n var re = d3_selection_classedRe(name);\n return function(node, value) {\n if (c = node.classList) return value ? c.add(name) : c.remove(name);\n var c = node.getAttribute(\"class\") || \"\";\n if (value) {\n re.lastIndex = 0;\n if (!re.test(c)) node.setAttribute(\"class\", d3_collapse(c + \" \" + name));\n } else {\n node.setAttribute(\"class\", d3_collapse(c.replace(re, \" \")));\n }\n };\n }\n d3_selectionPrototype.style = function(name, value, priority) {\n var n = arguments.length;\n if (n < 3) {\n if (typeof name !== \"string\") {\n if (n < 2) value = \"\";\n for (priority in name) this.each(d3_selection_style(priority, name[priority], value));\n return this;\n }\n if (n < 2) {\n var node = this.node();\n return d3_window(node).getComputedStyle(node, null).getPropertyValue(name);\n }\n priority = \"\";\n }\n return this.each(d3_selection_style(name, value, priority));\n };\n function d3_selection_style(name, value, priority) {\n function styleNull() {\n this.style.removeProperty(name);\n }\n function styleConstant() {\n this.style.setProperty(name, value, priority);\n }\n function styleFunction() {\n var x = value.apply(this, arguments);\n if (x == null) this.style.removeProperty(name); else this.style.setProperty(name, x, priority);\n }\n return value == null ? styleNull : typeof value === \"function\" ? styleFunction : styleConstant;\n }\n d3_selectionPrototype.property = function(name, value) {\n if (arguments.length < 2) {\n if (typeof name === \"string\") return this.node()[name];\n for (value in name) this.each(d3_selection_property(value, name[value]));\n return this;\n }\n return this.each(d3_selection_property(name, value));\n };\n function d3_selection_property(name, value) {\n function propertyNull() {\n delete this[name];\n }\n function propertyConstant() {\n this[name] = value;\n }\n function propertyFunction() {\n var x = value.apply(this, arguments);\n if (x == null) delete this[name]; else this[name] = x;\n }\n return value == null ? propertyNull : typeof value === \"function\" ? propertyFunction : propertyConstant;\n }\n d3_selectionPrototype.text = function(value) {\n return arguments.length ? this.each(typeof value === \"function\" ? function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n } : value == null ? function() {\n this.textContent = \"\";\n } : function() {\n this.textContent = value;\n }) : this.node().textContent;\n };\n d3_selectionPrototype.html = function(value) {\n return arguments.length ? this.each(typeof value === \"function\" ? function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n } : value == null ? function() {\n this.innerHTML = \"\";\n } : function() {\n this.innerHTML = value;\n }) : this.node().innerHTML;\n };\n d3_selectionPrototype.append = function(name) {\n name = d3_selection_creator(name);\n return this.select(function() {\n return this.appendChild(name.apply(this, arguments));\n });\n };\n function d3_selection_creator(name) {\n function create() {\n var document = this.ownerDocument, namespace = this.namespaceURI;\n return namespace ? document.createElementNS(namespace, name) : document.createElement(name);\n }\n function createNS() {\n return this.ownerDocument.createElementNS(name.space, name.local);\n }\n return typeof name === \"function\" ? name : (name = d3.ns.qualify(name)).local ? createNS : create;\n }\n d3_selectionPrototype.insert = function(name, before) {\n name = d3_selection_creator(name);\n before = d3_selection_selector(before);\n return this.select(function() {\n return this.insertBefore(name.apply(this, arguments), before.apply(this, arguments) || null);\n });\n };\n d3_selectionPrototype.remove = function() {\n return this.each(d3_selectionRemove);\n };\n function d3_selectionRemove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n }\n d3_selectionPrototype.data = function(value, key) {\n var i = -1, n = this.length, group, node;\n if (!arguments.length) {\n value = new Array(n = (group = this[0]).length);\n while (++i < n) {\n if (node = group[i]) {\n value[i] = node.__data__;\n }\n }\n return value;\n }\n function bind(group, groupData) {\n var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData;\n if (key) {\n var nodeByKeyValue = new d3_Map(), keyValues = new Array(n), keyValue;\n for (i = -1; ++i < n; ) {\n if (node = group[i]) {\n if (nodeByKeyValue.has(keyValue = key.call(node, node.__data__, i))) {\n exitNodes[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n keyValues[i] = keyValue;\n }\n }\n for (i = -1; ++i < m; ) {\n if (!(node = nodeByKeyValue.get(keyValue = key.call(groupData, nodeData = groupData[i], i)))) {\n enterNodes[i] = d3_selection_dataNode(nodeData);\n } else if (node !== true) {\n updateNodes[i] = node;\n node.__data__ = nodeData;\n }\n nodeByKeyValue.set(keyValue, true);\n }\n for (i = -1; ++i < n; ) {\n if (i in keyValues && nodeByKeyValue.get(keyValues[i]) !== true) {\n exitNodes[i] = group[i];\n }\n }\n } else {\n for (i = -1; ++i < n0; ) {\n node = group[i];\n nodeData = groupData[i];\n if (node) {\n node.__data__ = nodeData;\n updateNodes[i] = node;\n } else {\n enterNodes[i] = d3_selection_dataNode(nodeData);\n }\n }\n for (;i < m; ++i) {\n enterNodes[i] = d3_selection_dataNode(groupData[i]);\n }\n for (;i < n; ++i) {\n exitNodes[i] = group[i];\n }\n }\n enterNodes.update = updateNodes;\n enterNodes.parentNode = updateNodes.parentNode = exitNodes.parentNode = group.parentNode;\n enter.push(enterNodes);\n update.push(updateNodes);\n exit.push(exitNodes);\n }\n var enter = d3_selection_enter([]), update = d3_selection([]), exit = d3_selection([]);\n if (typeof value === \"function\") {\n while (++i < n) {\n bind(group = this[i], value.call(group, group.parentNode.__data__, i));\n }\n } else {\n while (++i < n) {\n bind(group = this[i], value);\n }\n }\n update.enter = function() {\n return enter;\n };\n update.exit = function() {\n return exit;\n };\n return update;\n };\n function d3_selection_dataNode(data) {\n return {\n __data__: data\n };\n }\n d3_selectionPrototype.datum = function(value) {\n return arguments.length ? this.property(\"__data__\", value) : this.property(\"__data__\");\n };\n d3_selectionPrototype.filter = function(filter) {\n var subgroups = [], subgroup, group, node;\n if (typeof filter !== \"function\") filter = d3_selection_filter(filter);\n for (var j = 0, m = this.length; j < m; j++) {\n subgroups.push(subgroup = []);\n subgroup.parentNode = (group = this[j]).parentNode;\n for (var i = 0, n = group.length; i < n; i++) {\n if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {\n subgroup.push(node);\n }\n }\n }\n return d3_selection(subgroups);\n };\n function d3_selection_filter(selector) {\n return function() {\n return d3_selectMatches(this, selector);\n };\n }\n d3_selectionPrototype.order = function() {\n for (var j = -1, m = this.length; ++j < m; ) {\n for (var group = this[j], i = group.length - 1, next = group[i], node; --i >= 0; ) {\n if (node = group[i]) {\n if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n return this;\n };\n d3_selectionPrototype.sort = function(comparator) {\n comparator = d3_selection_sortComparator.apply(this, arguments);\n for (var j = -1, m = this.length; ++j < m; ) this[j].sort(comparator);\n return this.order();\n };\n function d3_selection_sortComparator(comparator) {\n if (!arguments.length) comparator = d3_ascending;\n return function(a, b) {\n return a && b ? comparator(a.__data__, b.__data__) : !a - !b;\n };\n }\n d3_selectionPrototype.each = function(callback) {\n return d3_selection_each(this, function(node, i, j) {\n callback.call(node, node.__data__, i, j);\n });\n };\n function d3_selection_each(groups, callback) {\n for (var j = 0, m = groups.length; j < m; j++) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; i++) {\n if (node = group[i]) callback(node, i, j);\n }\n }\n return groups;\n }\n d3_selectionPrototype.call = function(callback) {\n var args = d3_array(arguments);\n callback.apply(args[0] = this, args);\n return this;\n };\n d3_selectionPrototype.empty = function() {\n return !this.node();\n };\n d3_selectionPrototype.node = function() {\n for (var j = 0, m = this.length; j < m; j++) {\n for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n var node = group[i];\n if (node) return node;\n }\n }\n return null;\n };\n d3_selectionPrototype.size = function() {\n var n = 0;\n d3_selection_each(this, function() {\n ++n;\n });\n return n;\n };\n function d3_selection_enter(selection) {\n d3_subclass(selection, d3_selection_enterPrototype);\n return selection;\n }\n var d3_selection_enterPrototype = [];\n d3.selection.enter = d3_selection_enter;\n d3.selection.enter.prototype = d3_selection_enterPrototype;\n d3_selection_enterPrototype.append = d3_selectionPrototype.append;\n d3_selection_enterPrototype.empty = d3_selectionPrototype.empty;\n d3_selection_enterPrototype.node = d3_selectionPrototype.node;\n d3_selection_enterPrototype.call = d3_selectionPrototype.call;\n d3_selection_enterPrototype.size = d3_selectionPrototype.size;\n d3_selection_enterPrototype.select = function(selector) {\n var subgroups = [], subgroup, subnode, upgroup, group, node;\n for (var j = -1, m = this.length; ++j < m; ) {\n upgroup = (group = this[j]).update;\n subgroups.push(subgroup = []);\n subgroup.parentNode = group.parentNode;\n for (var i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n subgroup.push(upgroup[i] = subnode = selector.call(group.parentNode, node.__data__, i, j));\n subnode.__data__ = node.__data__;\n } else {\n subgroup.push(null);\n }\n }\n }\n return d3_selection(subgroups);\n };\n d3_selection_enterPrototype.insert = function(name, before) {\n if (arguments.length < 2) before = d3_selection_enterInsertBefore(this);\n return d3_selectionPrototype.insert.call(this, name, before);\n };\n function d3_selection_enterInsertBefore(enter) {\n var i0, j0;\n return function(d, i, j) {\n var group = enter[j].update, n = group.length, node;\n if (j != j0) j0 = j, i0 = 0;\n if (i >= i0) i0 = i + 1;\n while (!(node = group[i0]) && ++i0 < n) ;\n return node;\n };\n }\n d3.select = function(node) {\n var group;\n if (typeof node === \"string\") {\n group = [ d3_select(node, d3_document) ];\n group.parentNode = d3_document.documentElement;\n } else {\n group = [ node ];\n group.parentNode = d3_documentElement(node);\n }\n return d3_selection([ group ]);\n };\n d3.selectAll = function(nodes) {\n var group;\n if (typeof nodes === \"string\") {\n group = d3_array(d3_selectAll(nodes, d3_document));\n group.parentNode = d3_document.documentElement;\n } else {\n group = d3_array(nodes);\n group.parentNode = null;\n }\n return d3_selection([ group ]);\n };\n d3_selectionPrototype.on = function(type, listener, capture) {\n var n = arguments.length;\n if (n < 3) {\n if (typeof type !== \"string\") {\n if (n < 2) listener = false;\n for (capture in type) this.each(d3_selection_on(capture, type[capture], listener));\n return this;\n }\n if (n < 2) return (n = this.node()[\"__on\" + type]) && n._;\n capture = false;\n }\n return this.each(d3_selection_on(type, listener, capture));\n };\n function d3_selection_on(type, listener, capture) {\n var name = \"__on\" + type, i = type.indexOf(\".\"), wrap = d3_selection_onListener;\n if (i > 0) type = type.slice(0, i);\n var filter = d3_selection_onFilters.get(type);\n if (filter) type = filter, wrap = d3_selection_onFilter;\n function onRemove() {\n var l = this[name];\n if (l) {\n this.removeEventListener(type, l, l.$);\n delete this[name];\n }\n }\n function onAdd() {\n var l = wrap(listener, d3_array(arguments));\n onRemove.call(this);\n this.addEventListener(type, this[name] = l, l.$ = capture);\n l._ = listener;\n }\n function removeAll() {\n var re = new RegExp(\"^__on([^.]+)\" + d3.requote(type) + \"$\"), match;\n for (var name in this) {\n if (match = name.match(re)) {\n var l = this[name];\n this.removeEventListener(match[1], l, l.$);\n delete this[name];\n }\n }\n }\n return i ? listener ? onAdd : onRemove : listener ? d3_noop : removeAll;\n }\n var d3_selection_onFilters = d3.map({\n mouseenter: \"mouseover\",\n mouseleave: \"mouseout\"\n });\n if (d3_document) {\n d3_selection_onFilters.forEach(function(k) {\n if (\"on\" + k in d3_document) d3_selection_onFilters.remove(k);\n });\n }\n function d3_selection_onListener(listener, argumentz) {\n return function(e) {\n var o = d3.event;\n d3.event = e;\n argumentz[0] = this.__data__;\n try {\n listener.apply(this, argumentz);\n } finally {\n d3.event = o;\n }\n };\n }\n function d3_selection_onFilter(listener, argumentz) {\n var l = d3_selection_onListener(listener, argumentz);\n return function(e) {\n var target = this, related = e.relatedTarget;\n if (!related || related !== target && !(related.compareDocumentPosition(target) & 8)) {\n l.call(target, e);\n }\n };\n }\n var d3_event_dragSelect, d3_event_dragId = 0;\n function d3_event_dragSuppress(node) {\n var name = \".dragsuppress-\" + ++d3_event_dragId, click = \"click\" + name, w = d3.select(d3_window(node)).on(\"touchmove\" + name, d3_eventPreventDefault).on(\"dragstart\" + name, d3_eventPreventDefault).on(\"selectstart\" + name, d3_eventPreventDefault);\n if (d3_event_dragSelect == null) {\n d3_event_dragSelect = \"onselectstart\" in node ? false : d3_vendorSymbol(node.style, \"userSelect\");\n }\n if (d3_event_dragSelect) {\n var style = d3_documentElement(node).style, select = style[d3_event_dragSelect];\n style[d3_event_dragSelect] = \"none\";\n }\n return function(suppressClick) {\n w.on(name, null);\n if (d3_event_dragSelect) style[d3_event_dragSelect] = select;\n if (suppressClick) {\n var off = function() {\n w.on(click, null);\n };\n w.on(click, function() {\n d3_eventPreventDefault();\n off();\n }, true);\n setTimeout(off, 0);\n }\n };\n }\n d3.mouse = function(container) {\n return d3_mousePoint(container, d3_eventSource());\n };\n var d3_mouse_bug44083 = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;\n function d3_mousePoint(container, e) {\n if (e.changedTouches) e = e.changedTouches[0];\n var svg = container.ownerSVGElement || container;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n if (d3_mouse_bug44083 < 0) {\n var window = d3_window(container);\n if (window.scrollX || window.scrollY) {\n svg = d3.select(\"body\").append(\"svg\").style({\n position: \"absolute\",\n top: 0,\n left: 0,\n margin: 0,\n padding: 0,\n border: \"none\"\n }, \"important\");\n var ctm = svg[0][0].getScreenCTM();\n d3_mouse_bug44083 = !(ctm.f || ctm.e);\n svg.remove();\n }\n }\n if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX, \n point.y = e.clientY;\n point = point.matrixTransform(container.getScreenCTM().inverse());\n return [ point.x, point.y ];\n }\n var rect = container.getBoundingClientRect();\n return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ];\n }\n d3.touch = function(container, touches, identifier) {\n if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches;\n if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) {\n if ((touch = touches[i]).identifier === identifier) {\n return d3_mousePoint(container, touch);\n }\n }\n };\n d3.behavior.drag = function() {\n var event = d3_eventDispatch(drag, \"drag\", \"dragstart\", \"dragend\"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_window, \"mousemove\", \"mouseup\"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_identity, \"touchmove\", \"touchend\");\n function drag() {\n this.on(\"mousedown.drag\", mousedown).on(\"touchstart.drag\", touchstart);\n }\n function dragstart(id, position, subject, move, end) {\n return function() {\n var that = this, target = d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = \".drag\" + (dragId == null ? \"\" : \"-\" + dragId), dragOffset, dragSubject = d3.select(subject(target)).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(target), position0 = position(parent, dragId);\n if (origin) {\n dragOffset = origin.apply(that, arguments);\n dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ];\n } else {\n dragOffset = [ 0, 0 ];\n }\n dispatch({\n type: \"dragstart\"\n });\n function moved() {\n var position1 = position(parent, dragId), dx, dy;\n if (!position1) return;\n dx = position1[0] - position0[0];\n dy = position1[1] - position0[1];\n dragged |= dx | dy;\n position0 = position1;\n dispatch({\n type: \"drag\",\n x: position1[0] + dragOffset[0],\n y: position1[1] + dragOffset[1],\n dx: dx,\n dy: dy\n });\n }\n function ended() {\n if (!position(parent, dragId)) return;\n dragSubject.on(move + dragName, null).on(end + dragName, null);\n dragRestore(dragged);\n dispatch({\n type: \"dragend\"\n });\n }\n };\n }\n drag.origin = function(x) {\n if (!arguments.length) return origin;\n origin = x;\n return drag;\n };\n return d3.rebind(drag, event, \"on\");\n };\n function d3_behavior_dragTouchId() {\n return d3.event.changedTouches[0].identifier;\n }\n d3.touches = function(container, touches) {\n if (arguments.length < 2) touches = d3_eventSource().touches;\n return touches ? d3_array(touches).map(function(touch) {\n var point = d3_mousePoint(container, touch);\n point.identifier = touch.identifier;\n return point;\n }) : [];\n };\n var ε = 1e-6, ε2 = ε * ε, π = Math.PI, τ = 2 * π, τε = τ - ε, halfπ = π / 2, d3_radians = π / 180, d3_degrees = 180 / π;\n function d3_sgn(x) {\n return x > 0 ? 1 : x < 0 ? -1 : 0;\n }\n function d3_cross2d(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);\n }\n function d3_acos(x) {\n return x > 1 ? 0 : x < -1 ? π : Math.acos(x);\n }\n function d3_asin(x) {\n return x > 1 ? halfπ : x < -1 ? -halfπ : Math.asin(x);\n }\n function d3_sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n }\n function d3_cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n }\n function d3_tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n }\n function d3_haversin(x) {\n return (x = Math.sin(x / 2)) * x;\n }\n var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4;\n d3.interpolateZoom = function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2], dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, i, S;\n if (d2 < ε2) {\n S = Math.log(w1 / w0) / ρ;\n i = function(t) {\n return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * t * S) ];\n };\n } else {\n var d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / ρ;\n i = function(t) {\n var s = t * S, coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0));\n return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0) ];\n };\n }\n i.duration = S * 1e3;\n return i;\n };\n d3.behavior.zoom = function() {\n var view = {\n x: 0,\n y: 0,\n k: 1\n }, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, duration = 250, zooming = 0, mousedown = \"mousedown.zoom\", mousemove = \"mousemove.zoom\", mouseup = \"mouseup.zoom\", mousewheelTimer, touchstart = \"touchstart.zoom\", touchtime, event = d3_eventDispatch(zoom, \"zoomstart\", \"zoom\", \"zoomend\"), x0, x1, y0, y1;\n if (!d3_behavior_zoomWheel) {\n d3_behavior_zoomWheel = \"onwheel\" in d3_document ? (d3_behavior_zoomDelta = function() {\n return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1);\n }, \"wheel\") : \"onmousewheel\" in d3_document ? (d3_behavior_zoomDelta = function() {\n return d3.event.wheelDelta;\n }, \"mousewheel\") : (d3_behavior_zoomDelta = function() {\n return -d3.event.detail;\n }, \"MozMousePixelScroll\");\n }\n function zoom(g) {\n g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + \".zoom\", mousewheeled).on(\"dblclick.zoom\", dblclicked).on(touchstart, touchstarted);\n }\n zoom.event = function(g) {\n g.each(function() {\n var dispatch = event.of(this, arguments), view1 = view;\n if (d3_transitionInheritId) {\n d3.select(this).transition().each(\"start.zoom\", function() {\n view = this.__chart__ || {\n x: 0,\n y: 0,\n k: 1\n };\n zoomstarted(dispatch);\n }).tween(\"zoom:zoom\", function() {\n var dx = size[0], dy = size[1], cx = center0 ? center0[0] : dx / 2, cy = center0 ? center0[1] : dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]);\n return function(t) {\n var l = i(t), k = dx / l[2];\n this.__chart__ = view = {\n x: cx - l[0] * k,\n y: cy - l[1] * k,\n k: k\n };\n zoomed(dispatch);\n };\n }).each(\"interrupt.zoom\", function() {\n zoomended(dispatch);\n }).each(\"end.zoom\", function() {\n zoomended(dispatch);\n });\n } else {\n this.__chart__ = view;\n zoomstarted(dispatch);\n zoomed(dispatch);\n zoomended(dispatch);\n }\n });\n };\n zoom.translate = function(_) {\n if (!arguments.length) return [ view.x, view.y ];\n view = {\n x: +_[0],\n y: +_[1],\n k: view.k\n };\n rescale();\n return zoom;\n };\n zoom.scale = function(_) {\n if (!arguments.length) return view.k;\n view = {\n x: view.x,\n y: view.y,\n k: null\n };\n scaleTo(+_);\n rescale();\n return zoom;\n };\n zoom.scaleExtent = function(_) {\n if (!arguments.length) return scaleExtent;\n scaleExtent = _ == null ? d3_behavior_zoomInfinity : [ +_[0], +_[1] ];\n return zoom;\n };\n zoom.center = function(_) {\n if (!arguments.length) return center;\n center = _ && [ +_[0], +_[1] ];\n return zoom;\n };\n zoom.size = function(_) {\n if (!arguments.length) return size;\n size = _ && [ +_[0], +_[1] ];\n return zoom;\n };\n zoom.duration = function(_) {\n if (!arguments.length) return duration;\n duration = +_;\n return zoom;\n };\n zoom.x = function(z) {\n if (!arguments.length) return x1;\n x1 = z;\n x0 = z.copy();\n view = {\n x: 0,\n y: 0,\n k: 1\n };\n return zoom;\n };\n zoom.y = function(z) {\n if (!arguments.length) return y1;\n y1 = z;\n y0 = z.copy();\n view = {\n x: 0,\n y: 0,\n k: 1\n };\n return zoom;\n };\n function location(p) {\n return [ (p[0] - view.x) / view.k, (p[1] - view.y) / view.k ];\n }\n function point(l) {\n return [ l[0] * view.k + view.x, l[1] * view.k + view.y ];\n }\n function scaleTo(s) {\n view.k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], s));\n }\n function translateTo(p, l) {\n l = point(l);\n view.x += p[0] - l[0];\n view.y += p[1] - l[1];\n }\n function zoomTo(that, p, l, k) {\n that.__chart__ = {\n x: view.x,\n y: view.y,\n k: view.k\n };\n scaleTo(Math.pow(2, k));\n translateTo(center0 = p, l);\n that = d3.select(that);\n if (duration > 0) that = that.transition().duration(duration);\n that.call(zoom.event);\n }\n function rescale() {\n if (x1) x1.domain(x0.range().map(function(x) {\n return (x - view.x) / view.k;\n }).map(x0.invert));\n if (y1) y1.domain(y0.range().map(function(y) {\n return (y - view.y) / view.k;\n }).map(y0.invert));\n }\n function zoomstarted(dispatch) {\n if (!zooming++) dispatch({\n type: \"zoomstart\"\n });\n }\n function zoomed(dispatch) {\n rescale();\n dispatch({\n type: \"zoom\",\n scale: view.k,\n translate: [ view.x, view.y ]\n });\n }\n function zoomended(dispatch) {\n if (!--zooming) dispatch({\n type: \"zoomend\"\n }), center0 = null;\n }\n function mousedowned() {\n var that = this, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window(that)).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress(that);\n d3_selection_interrupt.call(that);\n zoomstarted(dispatch);\n function moved() {\n dragged = 1;\n translateTo(d3.mouse(that), location0);\n zoomed(dispatch);\n }\n function ended() {\n subject.on(mousemove, null).on(mouseup, null);\n dragRestore(dragged);\n zoomended(dispatch);\n }\n }\n function touchstarted() {\n var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = \".zoom-\" + d3.event.changedTouches[0].identifier, touchmove = \"touchmove\" + zoomName, touchend = \"touchend\" + zoomName, targets = [], subject = d3.select(that), dragRestore = d3_event_dragSuppress(that);\n started();\n zoomstarted(dispatch);\n subject.on(mousedown, null).on(touchstart, started);\n function relocate() {\n var touches = d3.touches(that);\n scale0 = view.k;\n touches.forEach(function(t) {\n if (t.identifier in locations0) locations0[t.identifier] = location(t);\n });\n return touches;\n }\n function started() {\n var target = d3.event.target;\n d3.select(target).on(touchmove, moved).on(touchend, ended);\n targets.push(target);\n var changed = d3.event.changedTouches;\n for (var i = 0, n = changed.length; i < n; ++i) {\n locations0[changed[i].identifier] = null;\n }\n var touches = relocate(), now = Date.now();\n if (touches.length === 1) {\n if (now - touchtime < 500) {\n var p = touches[0];\n zoomTo(that, p, locations0[p.identifier], Math.floor(Math.log(view.k) / Math.LN2) + 1);\n d3_eventPreventDefault();\n }\n touchtime = now;\n } else if (touches.length > 1) {\n var p = touches[0], q = touches[1], dx = p[0] - q[0], dy = p[1] - q[1];\n distance0 = dx * dx + dy * dy;\n }\n }\n function moved() {\n var touches = d3.touches(that), p0, l0, p1, l1;\n d3_selection_interrupt.call(that);\n for (var i = 0, n = touches.length; i < n; ++i, l1 = null) {\n p1 = touches[i];\n if (l1 = locations0[p1.identifier]) {\n if (l0) break;\n p0 = p1, l0 = l1;\n }\n }\n if (l1) {\n var distance1 = (distance1 = p1[0] - p0[0]) * distance1 + (distance1 = p1[1] - p0[1]) * distance1, scale1 = distance0 && Math.sqrt(distance1 / distance0);\n p0 = [ (p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2 ];\n l0 = [ (l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2 ];\n scaleTo(scale1 * scale0);\n }\n touchtime = null;\n translateTo(p0, l0);\n zoomed(dispatch);\n }\n function ended() {\n if (d3.event.touches.length) {\n var changed = d3.event.changedTouches;\n for (var i = 0, n = changed.length; i < n; ++i) {\n delete locations0[changed[i].identifier];\n }\n for (var identifier in locations0) {\n return void relocate();\n }\n }\n d3.selectAll(targets).on(zoomName, null);\n subject.on(mousedown, mousedowned).on(touchstart, touchstarted);\n dragRestore();\n zoomended(dispatch);\n }\n }\n function mousewheeled() {\n var dispatch = event.of(this, arguments);\n if (mousewheelTimer) clearTimeout(mousewheelTimer); else d3_selection_interrupt.call(this), \n translate0 = location(center0 = center || d3.mouse(this)), zoomstarted(dispatch);\n mousewheelTimer = setTimeout(function() {\n mousewheelTimer = null;\n zoomended(dispatch);\n }, 50);\n d3_eventPreventDefault();\n scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k);\n translateTo(center0, translate0);\n zoomed(dispatch);\n }\n function dblclicked() {\n var p = d3.mouse(this), k = Math.log(view.k) / Math.LN2;\n zoomTo(this, p, location(p), d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1);\n }\n return d3.rebind(zoom, event, \"on\");\n };\n var d3_behavior_zoomInfinity = [ 0, Infinity ], d3_behavior_zoomDelta, d3_behavior_zoomWheel;\n d3.color = d3_color;\n function d3_color() {}\n d3_color.prototype.toString = function() {\n return this.rgb() + \"\";\n };\n d3.hsl = d3_hsl;\n function d3_hsl(h, s, l) {\n return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) : arguments.length < 2 ? h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) : d3_rgb_parse(\"\" + h, d3_rgb_hsl, d3_hsl) : new d3_hsl(h, s, l);\n }\n var d3_hslPrototype = d3_hsl.prototype = new d3_color();\n d3_hslPrototype.brighter = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n return new d3_hsl(this.h, this.s, this.l / k);\n };\n d3_hslPrototype.darker = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n return new d3_hsl(this.h, this.s, k * this.l);\n };\n d3_hslPrototype.rgb = function() {\n return d3_hsl_rgb(this.h, this.s, this.l);\n };\n function d3_hsl_rgb(h, s, l) {\n var m1, m2;\n h = isNaN(h) ? 0 : (h %= 360) < 0 ? h + 360 : h;\n s = isNaN(s) ? 0 : s < 0 ? 0 : s > 1 ? 1 : s;\n l = l < 0 ? 0 : l > 1 ? 1 : l;\n m2 = l <= .5 ? l * (1 + s) : l + s - l * s;\n m1 = 2 * l - m2;\n function v(h) {\n if (h > 360) h -= 360; else if (h < 0) h += 360;\n if (h < 60) return m1 + (m2 - m1) * h / 60;\n if (h < 180) return m2;\n if (h < 240) return m1 + (m2 - m1) * (240 - h) / 60;\n return m1;\n }\n function vv(h) {\n return Math.round(v(h) * 255);\n }\n return new d3_rgb(vv(h + 120), vv(h), vv(h - 120));\n }\n d3.hcl = d3_hcl;\n function d3_hcl(h, c, l) {\n return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) : arguments.length < 2 ? h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) : h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : new d3_hcl(h, c, l);\n }\n var d3_hclPrototype = d3_hcl.prototype = new d3_color();\n d3_hclPrototype.brighter = function(k) {\n return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)));\n };\n d3_hclPrototype.darker = function(k) {\n return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)));\n };\n d3_hclPrototype.rgb = function() {\n return d3_hcl_lab(this.h, this.c, this.l).rgb();\n };\n function d3_hcl_lab(h, c, l) {\n if (isNaN(h)) h = 0;\n if (isNaN(c)) c = 0;\n return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c);\n }\n d3.lab = d3_lab;\n function d3_lab(l, a, b) {\n return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.h, l.c, l.l) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b);\n }\n var d3_lab_K = 18;\n var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883;\n var d3_labPrototype = d3_lab.prototype = new d3_color();\n d3_labPrototype.brighter = function(k) {\n return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);\n };\n d3_labPrototype.darker = function(k) {\n return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);\n };\n d3_labPrototype.rgb = function() {\n return d3_lab_rgb(this.l, this.a, this.b);\n };\n function d3_lab_rgb(l, a, b) {\n var y = (l + 16) / 116, x = y + a / 500, z = y - b / 200;\n x = d3_lab_xyz(x) * d3_lab_X;\n y = d3_lab_xyz(y) * d3_lab_Y;\n z = d3_lab_xyz(z) * d3_lab_Z;\n return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z));\n }\n function d3_lab_hcl(l, a, b) {\n return l > 0 ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : new d3_hcl(NaN, NaN, l);\n }\n function d3_lab_xyz(x) {\n return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037;\n }\n function d3_xyz_lab(x) {\n return x > .008856 ? Math.pow(x, 1 / 3) : 7.787037 * x + 4 / 29;\n }\n function d3_xyz_rgb(r) {\n return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055));\n }\n d3.rgb = d3_rgb;\n function d3_rgb(r, g, b) {\n return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) : arguments.length < 2 ? r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse(\"\" + r, d3_rgb, d3_hsl_rgb) : new d3_rgb(r, g, b);\n }\n function d3_rgbNumber(value) {\n return new d3_rgb(value >> 16, value >> 8 & 255, value & 255);\n }\n function d3_rgbString(value) {\n return d3_rgbNumber(value) + \"\";\n }\n var d3_rgbPrototype = d3_rgb.prototype = new d3_color();\n d3_rgbPrototype.brighter = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n var r = this.r, g = this.g, b = this.b, i = 30;\n if (!r && !g && !b) return new d3_rgb(i, i, i);\n if (r && r < i) r = i;\n if (g && g < i) g = i;\n if (b && b < i) b = i;\n return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k));\n };\n d3_rgbPrototype.darker = function(k) {\n k = Math.pow(.7, arguments.length ? k : 1);\n return new d3_rgb(k * this.r, k * this.g, k * this.b);\n };\n d3_rgbPrototype.hsl = function() {\n return d3_rgb_hsl(this.r, this.g, this.b);\n };\n d3_rgbPrototype.toString = function() {\n return \"#\" + d3_rgb_hex(this.r) + d3_rgb_hex(this.g) + d3_rgb_hex(this.b);\n };\n function d3_rgb_hex(v) {\n return v < 16 ? \"0\" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16);\n }\n function d3_rgb_parse(format, rgb, hsl) {\n var r = 0, g = 0, b = 0, m1, m2, color;\n m1 = /([a-z]+)\\((.*)\\)/.exec(format = format.toLowerCase());\n if (m1) {\n m2 = m1[2].split(\",\");\n switch (m1[1]) {\n case \"hsl\":\n {\n return hsl(parseFloat(m2[0]), parseFloat(m2[1]) / 100, parseFloat(m2[2]) / 100);\n }\n\n case \"rgb\":\n {\n return rgb(d3_rgb_parseNumber(m2[0]), d3_rgb_parseNumber(m2[1]), d3_rgb_parseNumber(m2[2]));\n }\n }\n }\n if (color = d3_rgb_names.get(format)) {\n return rgb(color.r, color.g, color.b);\n }\n if (format != null && format.charAt(0) === \"#\" && !isNaN(color = parseInt(format.slice(1), 16))) {\n if (format.length === 4) {\n r = (color & 3840) >> 4;\n r = r >> 4 | r;\n g = color & 240;\n g = g >> 4 | g;\n b = color & 15;\n b = b << 4 | b;\n } else if (format.length === 7) {\n r = (color & 16711680) >> 16;\n g = (color & 65280) >> 8;\n b = color & 255;\n }\n }\n return rgb(r, g, b);\n }\n function d3_rgb_hsl(r, g, b) {\n var min = Math.min(r /= 255, g /= 255, b /= 255), max = Math.max(r, g, b), d = max - min, h, s, l = (max + min) / 2;\n if (d) {\n s = l < .5 ? d / (max + min) : d / (2 - max - min);\n if (r == max) h = (g - b) / d + (g < b ? 6 : 0); else if (g == max) h = (b - r) / d + 2; else h = (r - g) / d + 4;\n h *= 60;\n } else {\n h = NaN;\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new d3_hsl(h, s, l);\n }\n function d3_rgb_lab(r, g, b) {\n r = d3_rgb_xyz(r);\n g = d3_rgb_xyz(g);\n b = d3_rgb_xyz(b);\n var x = d3_xyz_lab((.4124564 * r + .3575761 * g + .1804375 * b) / d3_lab_X), y = d3_xyz_lab((.2126729 * r + .7151522 * g + .072175 * b) / d3_lab_Y), z = d3_xyz_lab((.0193339 * r + .119192 * g + .9503041 * b) / d3_lab_Z);\n return d3_lab(116 * y - 16, 500 * (x - y), 200 * (y - z));\n }\n function d3_rgb_xyz(r) {\n return (r /= 255) <= .04045 ? r / 12.92 : Math.pow((r + .055) / 1.055, 2.4);\n }\n function d3_rgb_parseNumber(c) {\n var f = parseFloat(c);\n return c.charAt(c.length - 1) === \"%\" ? Math.round(f * 2.55) : f;\n }\n var d3_rgb_names = d3.map({\n aliceblue: 15792383,\n antiquewhite: 16444375,\n aqua: 65535,\n aquamarine: 8388564,\n azure: 15794175,\n beige: 16119260,\n bisque: 16770244,\n black: 0,\n blanchedalmond: 16772045,\n blue: 255,\n blueviolet: 9055202,\n brown: 10824234,\n burlywood: 14596231,\n cadetblue: 6266528,\n chartreuse: 8388352,\n chocolate: 13789470,\n coral: 16744272,\n cornflowerblue: 6591981,\n cornsilk: 16775388,\n crimson: 14423100,\n cyan: 65535,\n darkblue: 139,\n darkcyan: 35723,\n darkgoldenrod: 12092939,\n darkgray: 11119017,\n darkgreen: 25600,\n darkgrey: 11119017,\n darkkhaki: 12433259,\n darkmagenta: 9109643,\n darkolivegreen: 5597999,\n darkorange: 16747520,\n darkorchid: 10040012,\n darkred: 9109504,\n darksalmon: 15308410,\n darkseagreen: 9419919,\n darkslateblue: 4734347,\n darkslategray: 3100495,\n darkslategrey: 3100495,\n darkturquoise: 52945,\n darkviolet: 9699539,\n deeppink: 16716947,\n deepskyblue: 49151,\n dimgray: 6908265,\n dimgrey: 6908265,\n dodgerblue: 2003199,\n firebrick: 11674146,\n floralwhite: 16775920,\n forestgreen: 2263842,\n fuchsia: 16711935,\n gainsboro: 14474460,\n ghostwhite: 16316671,\n gold: 16766720,\n goldenrod: 14329120,\n gray: 8421504,\n green: 32768,\n greenyellow: 11403055,\n grey: 8421504,\n honeydew: 15794160,\n hotpink: 16738740,\n indianred: 13458524,\n indigo: 4915330,\n ivory: 16777200,\n khaki: 15787660,\n lavender: 15132410,\n lavenderblush: 16773365,\n lawngreen: 8190976,\n lemonchiffon: 16775885,\n lightblue: 11393254,\n lightcoral: 15761536,\n lightcyan: 14745599,\n lightgoldenrodyellow: 16448210,\n lightgray: 13882323,\n lightgreen: 9498256,\n lightgrey: 13882323,\n lightpink: 16758465,\n lightsalmon: 16752762,\n lightseagreen: 2142890,\n lightskyblue: 8900346,\n lightslategray: 7833753,\n lightslategrey: 7833753,\n lightsteelblue: 11584734,\n lightyellow: 16777184,\n lime: 65280,\n limegreen: 3329330,\n linen: 16445670,\n magenta: 16711935,\n maroon: 8388608,\n mediumaquamarine: 6737322,\n mediumblue: 205,\n mediumorchid: 12211667,\n mediumpurple: 9662683,\n mediumseagreen: 3978097,\n mediumslateblue: 8087790,\n mediumspringgreen: 64154,\n mediumturquoise: 4772300,\n mediumvioletred: 13047173,\n midnightblue: 1644912,\n mintcream: 16121850,\n mistyrose: 16770273,\n moccasin: 16770229,\n navajowhite: 16768685,\n navy: 128,\n oldlace: 16643558,\n olive: 8421376,\n olivedrab: 7048739,\n orange: 16753920,\n orangered: 16729344,\n orchid: 14315734,\n palegoldenrod: 15657130,\n palegreen: 10025880,\n paleturquoise: 11529966,\n palevioletred: 14381203,\n papayawhip: 16773077,\n peachpuff: 16767673,\n peru: 13468991,\n pink: 16761035,\n plum: 14524637,\n powderblue: 11591910,\n purple: 8388736,\n rebeccapurple: 6697881,\n red: 16711680,\n rosybrown: 12357519,\n royalblue: 4286945,\n saddlebrown: 9127187,\n salmon: 16416882,\n sandybrown: 16032864,\n seagreen: 3050327,\n seashell: 16774638,\n sienna: 10506797,\n silver: 12632256,\n skyblue: 8900331,\n slateblue: 6970061,\n slategray: 7372944,\n slategrey: 7372944,\n snow: 16775930,\n springgreen: 65407,\n steelblue: 4620980,\n tan: 13808780,\n teal: 32896,\n thistle: 14204888,\n tomato: 16737095,\n turquoise: 4251856,\n violet: 15631086,\n wheat: 16113331,\n white: 16777215,\n whitesmoke: 16119285,\n yellow: 16776960,\n yellowgreen: 10145074\n });\n d3_rgb_names.forEach(function(key, value) {\n d3_rgb_names.set(key, d3_rgbNumber(value));\n });\n function d3_functor(v) {\n return typeof v === \"function\" ? v : function() {\n return v;\n };\n }\n d3.functor = d3_functor;\n d3.xhr = d3_xhrType(d3_identity);\n function d3_xhrType(response) {\n return function(url, mimeType, callback) {\n if (arguments.length === 2 && typeof mimeType === \"function\") callback = mimeType, \n mimeType = null;\n return d3_xhr(url, mimeType, response, callback);\n };\n }\n function d3_xhr(url, mimeType, response, callback) {\n var xhr = {}, dispatch = d3.dispatch(\"beforesend\", \"progress\", \"load\", \"error\"), headers = {}, request = new XMLHttpRequest(), responseType = null;\n if (this.XDomainRequest && !(\"withCredentials\" in request) && /^(http(s)?:)?\\/\\//.test(url)) request = new XDomainRequest();\n \"onload\" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() {\n request.readyState > 3 && respond();\n };\n function respond() {\n var status = request.status, result;\n if (!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) {\n try {\n result = response.call(xhr, request);\n } catch (e) {\n dispatch.error.call(xhr, e);\n return;\n }\n dispatch.load.call(xhr, result);\n } else {\n dispatch.error.call(xhr, request);\n }\n }\n request.onprogress = function(event) {\n var o = d3.event;\n d3.event = event;\n try {\n dispatch.progress.call(xhr, request);\n } finally {\n d3.event = o;\n }\n };\n xhr.header = function(name, value) {\n name = (name + \"\").toLowerCase();\n if (arguments.length < 2) return headers[name];\n if (value == null) delete headers[name]; else headers[name] = value + \"\";\n return xhr;\n };\n xhr.mimeType = function(value) {\n if (!arguments.length) return mimeType;\n mimeType = value == null ? null : value + \"\";\n return xhr;\n };\n xhr.responseType = function(value) {\n if (!arguments.length) return responseType;\n responseType = value;\n return xhr;\n };\n xhr.response = function(value) {\n response = value;\n return xhr;\n };\n [ \"get\", \"post\" ].forEach(function(method) {\n xhr[method] = function() {\n return xhr.send.apply(xhr, [ method ].concat(d3_array(arguments)));\n };\n });\n xhr.send = function(method, data, callback) {\n if (arguments.length === 2 && typeof data === \"function\") callback = data, data = null;\n request.open(method, url, true);\n if (mimeType != null && !(\"accept\" in headers)) headers[\"accept\"] = mimeType + \",*/*\";\n if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]);\n if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType);\n if (responseType != null) request.responseType = responseType;\n if (callback != null) xhr.on(\"error\", callback).on(\"load\", function(request) {\n callback(null, request);\n });\n dispatch.beforesend.call(xhr, request);\n request.send(data == null ? null : data);\n return xhr;\n };\n xhr.abort = function() {\n request.abort();\n return xhr;\n };\n d3.rebind(xhr, dispatch, \"on\");\n return callback == null ? xhr : xhr.get(d3_xhr_fixCallback(callback));\n }\n function d3_xhr_fixCallback(callback) {\n return callback.length === 1 ? function(error, request) {\n callback(error == null ? request : null);\n } : callback;\n }\n function d3_xhrHasResponse(request) {\n var type = request.responseType;\n return type && type !== \"text\" ? request.response : request.responseText;\n }\n d3.dsv = function(delimiter, mimeType) {\n var reFormat = new RegExp('[\"' + delimiter + \"\\n]\"), delimiterCode = delimiter.charCodeAt(0);\n function dsv(url, row, callback) {\n if (arguments.length < 3) callback = row, row = null;\n var xhr = d3_xhr(url, mimeType, row == null ? response : typedResponse(row), callback);\n xhr.row = function(_) {\n return arguments.length ? xhr.response((row = _) == null ? response : typedResponse(_)) : row;\n };\n return xhr;\n }\n function response(request) {\n return dsv.parse(request.responseText);\n }\n function typedResponse(f) {\n return function(request) {\n return dsv.parse(request.responseText, f);\n };\n }\n dsv.parse = function(text, f) {\n var o;\n return dsv.parseRows(text, function(row, i) {\n if (o) return o(row, i - 1);\n var a = new Function(\"d\", \"return {\" + row.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"]\";\n }).join(\",\") + \"}\");\n o = f ? function(row, i) {\n return f(a(row), i);\n } : a;\n });\n };\n dsv.parseRows = function(text, f) {\n var EOL = {}, EOF = {}, rows = [], N = text.length, I = 0, n = 0, t, eol;\n function token() {\n if (I >= N) return EOF;\n if (eol) return eol = false, EOL;\n var j = I;\n if (text.charCodeAt(j) === 34) {\n var i = j;\n while (i++ < N) {\n if (text.charCodeAt(i) === 34) {\n if (text.charCodeAt(i + 1) !== 34) break;\n ++i;\n }\n }\n I = i + 2;\n var c = text.charCodeAt(i + 1);\n if (c === 13) {\n eol = true;\n if (text.charCodeAt(i + 2) === 10) ++I;\n } else if (c === 10) {\n eol = true;\n }\n return text.slice(j + 1, i).replace(/\"\"/g, '\"');\n }\n while (I < N) {\n var c = text.charCodeAt(I++), k = 1;\n if (c === 10) eol = true; else if (c === 13) {\n eol = true;\n if (text.charCodeAt(I) === 10) ++I, ++k;\n } else if (c !== delimiterCode) continue;\n return text.slice(j, I - k);\n }\n return text.slice(j);\n }\n while ((t = token()) !== EOF) {\n var a = [];\n while (t !== EOL && t !== EOF) {\n a.push(t);\n t = token();\n }\n if (f && (a = f(a, n++)) == null) continue;\n rows.push(a);\n }\n return rows;\n };\n dsv.format = function(rows) {\n if (Array.isArray(rows[0])) return dsv.formatRows(rows);\n var fieldSet = new d3_Set(), fields = [];\n rows.forEach(function(row) {\n for (var field in row) {\n if (!fieldSet.has(field)) {\n fields.push(fieldSet.add(field));\n }\n }\n });\n return [ fields.map(formatValue).join(delimiter) ].concat(rows.map(function(row) {\n return fields.map(function(field) {\n return formatValue(row[field]);\n }).join(delimiter);\n })).join(\"\\n\");\n };\n dsv.formatRows = function(rows) {\n return rows.map(formatRow).join(\"\\n\");\n };\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n function formatValue(text) {\n return reFormat.test(text) ? '\"' + text.replace(/\\\"/g, '\"\"') + '\"' : text;\n }\n return dsv;\n };\n d3.csv = d3.dsv(\",\", \"text/csv\");\n d3.tsv = d3.dsv(\"\t\", \"text/tab-separated-values\");\n var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_frame = this[d3_vendorSymbol(this, \"requestAnimationFrame\")] || function(callback) {\n setTimeout(callback, 17);\n };\n d3.timer = function() {\n d3_timer.apply(this, arguments);\n };\n function d3_timer(callback, delay, then) {\n var n = arguments.length;\n if (n < 2) delay = 0;\n if (n < 3) then = Date.now();\n var time = then + delay, timer = {\n c: callback,\n t: time,\n n: null\n };\n if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer;\n d3_timer_queueTail = timer;\n if (!d3_timer_interval) {\n d3_timer_timeout = clearTimeout(d3_timer_timeout);\n d3_timer_interval = 1;\n d3_timer_frame(d3_timer_step);\n }\n return timer;\n }\n function d3_timer_step() {\n var now = d3_timer_mark(), delay = d3_timer_sweep() - now;\n if (delay > 24) {\n if (isFinite(delay)) {\n clearTimeout(d3_timer_timeout);\n d3_timer_timeout = setTimeout(d3_timer_step, delay);\n }\n d3_timer_interval = 0;\n } else {\n d3_timer_interval = 1;\n d3_timer_frame(d3_timer_step);\n }\n }\n d3.timer.flush = function() {\n d3_timer_mark();\n d3_timer_sweep();\n };\n function d3_timer_mark() {\n var now = Date.now(), timer = d3_timer_queueHead;\n while (timer) {\n if (now >= timer.t && timer.c(now - timer.t)) timer.c = null;\n timer = timer.n;\n }\n return now;\n }\n function d3_timer_sweep() {\n var t0, t1 = d3_timer_queueHead, time = Infinity;\n while (t1) {\n if (t1.c) {\n if (t1.t < time) time = t1.t;\n t1 = (t0 = t1).n;\n } else {\n t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n;\n }\n }\n d3_timer_queueTail = t0;\n return time;\n }\n function d3_format_precision(x, p) {\n return p - (x ? Math.ceil(Math.log(x) / Math.LN10) : 1);\n }\n d3.round = function(x, n) {\n return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x);\n };\n var d3_formatPrefixes = [ \"y\", \"z\", \"a\", \"f\", \"p\", \"n\", \"µ\", \"m\", \"\", \"k\", \"M\", \"G\", \"T\", \"P\", \"E\", \"Z\", \"Y\" ].map(d3_formatPrefix);\n d3.formatPrefix = function(value, precision) {\n var i = 0;\n if (value = +value) {\n if (value < 0) value *= -1;\n if (precision) value = d3.round(value, d3_format_precision(value, precision));\n i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10);\n i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3));\n }\n return d3_formatPrefixes[8 + i / 3];\n };\n function d3_formatPrefix(d, i) {\n var k = Math.pow(10, abs(8 - i) * 3);\n return {\n scale: i > 8 ? function(d) {\n return d / k;\n } : function(d) {\n return d * k;\n },\n symbol: d\n };\n }\n function d3_locale_numberFormat(locale) {\n var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping && locale_thousands ? function(value, width) {\n var i = value.length, t = [], j = 0, g = locale_grouping[0], length = 0;\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = locale_grouping[j = (j + 1) % locale_grouping.length];\n }\n return t.reverse().join(locale_thousands);\n } : d3_identity;\n return function(specifier) {\n var match = d3_format_re.exec(specifier), fill = match[1] || \" \", align = match[2] || \">\", sign = match[3] || \"-\", symbol = match[4] || \"\", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = \"\", suffix = \"\", integer = false, exponent = true;\n if (precision) precision = +precision.substring(1);\n if (zfill || fill === \"0\" && align === \"=\") {\n zfill = fill = \"0\";\n align = \"=\";\n }\n switch (type) {\n case \"n\":\n comma = true;\n type = \"g\";\n break;\n\n case \"%\":\n scale = 100;\n suffix = \"%\";\n type = \"f\";\n break;\n\n case \"p\":\n scale = 100;\n suffix = \"%\";\n type = \"r\";\n break;\n\n case \"b\":\n case \"o\":\n case \"x\":\n case \"X\":\n if (symbol === \"#\") prefix = \"0\" + type.toLowerCase();\n\n case \"c\":\n exponent = false;\n\n case \"d\":\n integer = true;\n precision = 0;\n break;\n\n case \"s\":\n scale = -1;\n type = \"r\";\n break;\n }\n if (symbol === \"$\") prefix = locale_currency[0], suffix = locale_currency[1];\n if (type == \"r\" && !precision) type = \"g\";\n if (precision != null) {\n if (type == \"g\") precision = Math.max(1, Math.min(21, precision)); else if (type == \"e\" || type == \"f\") precision = Math.max(0, Math.min(20, precision));\n }\n type = d3_format_types.get(type) || d3_format_typeDefault;\n var zcomma = zfill && comma;\n return function(value) {\n var fullSuffix = suffix;\n if (integer && value % 1) return \"\";\n var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, \"-\") : sign === \"-\" ? \"\" : sign;\n if (scale < 0) {\n var unit = d3.formatPrefix(value, precision);\n value = unit.scale(value);\n fullSuffix = unit.symbol + suffix;\n } else {\n value *= scale;\n }\n value = type(value, precision);\n var i = value.lastIndexOf(\".\"), before, after;\n if (i < 0) {\n var j = exponent ? value.lastIndexOf(\"e\") : -1;\n if (j < 0) before = value, after = \"\"; else before = value.substring(0, j), after = value.substring(j);\n } else {\n before = value.substring(0, i);\n after = locale_decimal + value.substring(i + 1);\n }\n if (!zfill && comma) before = formatGroup(before, Infinity);\n var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : \"\";\n if (zcomma) before = formatGroup(padding + before, padding.length ? width - after.length : Infinity);\n negative += prefix;\n value = before + after;\n return (align === \"<\" ? negative + value + padding : align === \">\" ? padding + negative + value : align === \"^\" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + fullSuffix;\n };\n };\n }\n var d3_format_re = /(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i;\n var d3_format_types = d3.map({\n b: function(x) {\n return x.toString(2);\n },\n c: function(x) {\n return String.fromCharCode(x);\n },\n o: function(x) {\n return x.toString(8);\n },\n x: function(x) {\n return x.toString(16);\n },\n X: function(x) {\n return x.toString(16).toUpperCase();\n },\n g: function(x, p) {\n return x.toPrecision(p);\n },\n e: function(x, p) {\n return x.toExponential(p);\n },\n f: function(x, p) {\n return x.toFixed(p);\n },\n r: function(x, p) {\n return (x = d3.round(x, d3_format_precision(x, p))).toFixed(Math.max(0, Math.min(20, d3_format_precision(x * (1 + 1e-15), p))));\n }\n });\n function d3_format_typeDefault(x) {\n return x + \"\";\n }\n var d3_time = d3.time = {}, d3_date = Date;\n function d3_date_utc() {\n this._ = new Date(arguments.length > 1 ? Date.UTC.apply(this, arguments) : arguments[0]);\n }\n d3_date_utc.prototype = {\n getDate: function() {\n return this._.getUTCDate();\n },\n getDay: function() {\n return this._.getUTCDay();\n },\n getFullYear: function() {\n return this._.getUTCFullYear();\n },\n getHours: function() {\n return this._.getUTCHours();\n },\n getMilliseconds: function() {\n return this._.getUTCMilliseconds();\n },\n getMinutes: function() {\n return this._.getUTCMinutes();\n },\n getMonth: function() {\n return this._.getUTCMonth();\n },\n getSeconds: function() {\n return this._.getUTCSeconds();\n },\n getTime: function() {\n return this._.getTime();\n },\n getTimezoneOffset: function() {\n return 0;\n },\n valueOf: function() {\n return this._.valueOf();\n },\n setDate: function() {\n d3_time_prototype.setUTCDate.apply(this._, arguments);\n },\n setDay: function() {\n d3_time_prototype.setUTCDay.apply(this._, arguments);\n },\n setFullYear: function() {\n d3_time_prototype.setUTCFullYear.apply(this._, arguments);\n },\n setHours: function() {\n d3_time_prototype.setUTCHours.apply(this._, arguments);\n },\n setMilliseconds: function() {\n d3_time_prototype.setUTCMilliseconds.apply(this._, arguments);\n },\n setMinutes: function() {\n d3_time_prototype.setUTCMinutes.apply(this._, arguments);\n },\n setMonth: function() {\n d3_time_prototype.setUTCMonth.apply(this._, arguments);\n },\n setSeconds: function() {\n d3_time_prototype.setUTCSeconds.apply(this._, arguments);\n },\n setTime: function() {\n d3_time_prototype.setTime.apply(this._, arguments);\n }\n };\n var d3_time_prototype = Date.prototype;\n function d3_time_interval(local, step, number) {\n function round(date) {\n var d0 = local(date), d1 = offset(d0, 1);\n return date - d0 < d1 - date ? d0 : d1;\n }\n function ceil(date) {\n step(date = local(new d3_date(date - 1)), 1);\n return date;\n }\n function offset(date, k) {\n step(date = new d3_date(+date), k);\n return date;\n }\n function range(t0, t1, dt) {\n var time = ceil(t0), times = [];\n if (dt > 1) {\n while (time < t1) {\n if (!(number(time) % dt)) times.push(new Date(+time));\n step(time, 1);\n }\n } else {\n while (time < t1) times.push(new Date(+time)), step(time, 1);\n }\n return times;\n }\n function range_utc(t0, t1, dt) {\n try {\n d3_date = d3_date_utc;\n var utc = new d3_date_utc();\n utc._ = t0;\n return range(utc, t1, dt);\n } finally {\n d3_date = Date;\n }\n }\n local.floor = local;\n local.round = round;\n local.ceil = ceil;\n local.offset = offset;\n local.range = range;\n var utc = local.utc = d3_time_interval_utc(local);\n utc.floor = utc;\n utc.round = d3_time_interval_utc(round);\n utc.ceil = d3_time_interval_utc(ceil);\n utc.offset = d3_time_interval_utc(offset);\n utc.range = range_utc;\n return local;\n }\n function d3_time_interval_utc(method) {\n return function(date, k) {\n try {\n d3_date = d3_date_utc;\n var utc = new d3_date_utc();\n utc._ = date;\n return method(utc, k)._;\n } finally {\n d3_date = Date;\n }\n };\n }\n d3_time.year = d3_time_interval(function(date) {\n date = d3_time.day(date);\n date.setMonth(0, 1);\n return date;\n }, function(date, offset) {\n date.setFullYear(date.getFullYear() + offset);\n }, function(date) {\n return date.getFullYear();\n });\n d3_time.years = d3_time.year.range;\n d3_time.years.utc = d3_time.year.utc.range;\n d3_time.day = d3_time_interval(function(date) {\n var day = new d3_date(2e3, 0);\n day.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n return day;\n }, function(date, offset) {\n date.setDate(date.getDate() + offset);\n }, function(date) {\n return date.getDate() - 1;\n });\n d3_time.days = d3_time.day.range;\n d3_time.days.utc = d3_time.day.utc.range;\n d3_time.dayOfYear = function(date) {\n var year = d3_time.year(date);\n return Math.floor((date - year - (date.getTimezoneOffset() - year.getTimezoneOffset()) * 6e4) / 864e5);\n };\n [ \"sunday\", \"monday\", \"tuesday\", \"wednesday\", \"thursday\", \"friday\", \"saturday\" ].forEach(function(day, i) {\n i = 7 - i;\n var interval = d3_time[day] = d3_time_interval(function(date) {\n (date = d3_time.day(date)).setDate(date.getDate() - (date.getDay() + i) % 7);\n return date;\n }, function(date, offset) {\n date.setDate(date.getDate() + Math.floor(offset) * 7);\n }, function(date) {\n var day = d3_time.year(date).getDay();\n return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7) - (day !== i);\n });\n d3_time[day + \"s\"] = interval.range;\n d3_time[day + \"s\"].utc = interval.utc.range;\n d3_time[day + \"OfYear\"] = function(date) {\n var day = d3_time.year(date).getDay();\n return Math.floor((d3_time.dayOfYear(date) + (day + i) % 7) / 7);\n };\n });\n d3_time.week = d3_time.sunday;\n d3_time.weeks = d3_time.sunday.range;\n d3_time.weeks.utc = d3_time.sunday.utc.range;\n d3_time.weekOfYear = d3_time.sundayOfYear;\n function d3_locale_timeFormat(locale) {\n var locale_dateTime = locale.dateTime, locale_date = locale.date, locale_time = locale.time, locale_periods = locale.periods, locale_days = locale.days, locale_shortDays = locale.shortDays, locale_months = locale.months, locale_shortMonths = locale.shortMonths;\n function d3_time_format(template) {\n var n = template.length;\n function format(date) {\n var string = [], i = -1, j = 0, c, p, f;\n while (++i < n) {\n if (template.charCodeAt(i) === 37) {\n string.push(template.slice(j, i));\n if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i);\n if (f = d3_time_formats[c]) c = f(date, p == null ? c === \"e\" ? \" \" : \"0\" : p);\n string.push(c);\n j = i + 1;\n }\n }\n string.push(template.slice(j, i));\n return string.join(\"\");\n }\n format.parse = function(string) {\n var d = {\n y: 1900,\n m: 0,\n d: 1,\n H: 0,\n M: 0,\n S: 0,\n L: 0,\n Z: null\n }, i = d3_time_parse(d, template, string, 0);\n if (i != string.length) return null;\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)();\n if (\"j\" in d) date.setFullYear(d.y, 0, d.j); else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"W\" in d ? 1 : 0;\n date.setFullYear(d.y, 0, 1);\n date.setFullYear(d.y, 0, \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7);\n } else date.setFullYear(d.y, d.m, d.d);\n date.setHours(d.H + (d.Z / 100 | 0), d.M + d.Z % 100, d.S, d.L);\n return localZ ? date._ : date;\n };\n format.toString = function() {\n return template;\n };\n return format;\n }\n function d3_time_parse(date, template, string, j) {\n var c, p, t, i = 0, n = template.length, m = string.length;\n while (i < n) {\n if (j >= m) return -1;\n c = template.charCodeAt(i++);\n if (c === 37) {\n t = template.charAt(i++);\n p = d3_time_parsers[t in d3_time_formatPads ? template.charAt(i++) : t];\n if (!p || (j = p(date, string, j)) < 0) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n return j;\n }\n d3_time_format.utc = function(template) {\n var local = d3_time_format(template);\n function format(date) {\n try {\n d3_date = d3_date_utc;\n var utc = new d3_date();\n utc._ = date;\n return local(utc);\n } finally {\n d3_date = Date;\n }\n }\n format.parse = function(string) {\n try {\n d3_date = d3_date_utc;\n var date = local.parse(string);\n return date && date._;\n } finally {\n d3_date = Date;\n }\n };\n format.toString = local.toString;\n return format;\n };\n d3_time_format.multi = d3_time_format.utc.multi = d3_time_formatMulti;\n var d3_time_periodLookup = d3.map(), d3_time_dayRe = d3_time_formatRe(locale_days), d3_time_dayLookup = d3_time_formatLookup(locale_days), d3_time_dayAbbrevRe = d3_time_formatRe(locale_shortDays), d3_time_dayAbbrevLookup = d3_time_formatLookup(locale_shortDays), d3_time_monthRe = d3_time_formatRe(locale_months), d3_time_monthLookup = d3_time_formatLookup(locale_months), d3_time_monthAbbrevRe = d3_time_formatRe(locale_shortMonths), d3_time_monthAbbrevLookup = d3_time_formatLookup(locale_shortMonths);\n locale_periods.forEach(function(p, i) {\n d3_time_periodLookup.set(p.toLowerCase(), i);\n });\n var d3_time_formats = {\n a: function(d) {\n return locale_shortDays[d.getDay()];\n },\n A: function(d) {\n return locale_days[d.getDay()];\n },\n b: function(d) {\n return locale_shortMonths[d.getMonth()];\n },\n B: function(d) {\n return locale_months[d.getMonth()];\n },\n c: d3_time_format(locale_dateTime),\n d: function(d, p) {\n return d3_time_formatPad(d.getDate(), p, 2);\n },\n e: function(d, p) {\n return d3_time_formatPad(d.getDate(), p, 2);\n },\n H: function(d, p) {\n return d3_time_formatPad(d.getHours(), p, 2);\n },\n I: function(d, p) {\n return d3_time_formatPad(d.getHours() % 12 || 12, p, 2);\n },\n j: function(d, p) {\n return d3_time_formatPad(1 + d3_time.dayOfYear(d), p, 3);\n },\n L: function(d, p) {\n return d3_time_formatPad(d.getMilliseconds(), p, 3);\n },\n m: function(d, p) {\n return d3_time_formatPad(d.getMonth() + 1, p, 2);\n },\n M: function(d, p) {\n return d3_time_formatPad(d.getMinutes(), p, 2);\n },\n p: function(d) {\n return locale_periods[+(d.getHours() >= 12)];\n },\n S: function(d, p) {\n return d3_time_formatPad(d.getSeconds(), p, 2);\n },\n U: function(d, p) {\n return d3_time_formatPad(d3_time.sundayOfYear(d), p, 2);\n },\n w: function(d) {\n return d.getDay();\n },\n W: function(d, p) {\n return d3_time_formatPad(d3_time.mondayOfYear(d), p, 2);\n },\n x: d3_time_format(locale_date),\n X: d3_time_format(locale_time),\n y: function(d, p) {\n return d3_time_formatPad(d.getFullYear() % 100, p, 2);\n },\n Y: function(d, p) {\n return d3_time_formatPad(d.getFullYear() % 1e4, p, 4);\n },\n Z: d3_time_zone,\n \"%\": function() {\n return \"%\";\n }\n };\n var d3_time_parsers = {\n a: d3_time_parseWeekdayAbbrev,\n A: d3_time_parseWeekday,\n b: d3_time_parseMonthAbbrev,\n B: d3_time_parseMonth,\n c: d3_time_parseLocaleFull,\n d: d3_time_parseDay,\n e: d3_time_parseDay,\n H: d3_time_parseHour24,\n I: d3_time_parseHour24,\n j: d3_time_parseDayOfYear,\n L: d3_time_parseMilliseconds,\n m: d3_time_parseMonthNumber,\n M: d3_time_parseMinutes,\n p: d3_time_parseAmPm,\n S: d3_time_parseSeconds,\n U: d3_time_parseWeekNumberSunday,\n w: d3_time_parseWeekdayNumber,\n W: d3_time_parseWeekNumberMonday,\n x: d3_time_parseLocaleDate,\n X: d3_time_parseLocaleTime,\n y: d3_time_parseYear,\n Y: d3_time_parseFullYear,\n Z: d3_time_parseZone,\n \"%\": d3_time_parseLiteralPercent\n };\n function d3_time_parseWeekdayAbbrev(date, string, i) {\n d3_time_dayAbbrevRe.lastIndex = 0;\n var n = d3_time_dayAbbrevRe.exec(string.slice(i));\n return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n function d3_time_parseWeekday(date, string, i) {\n d3_time_dayRe.lastIndex = 0;\n var n = d3_time_dayRe.exec(string.slice(i));\n return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n function d3_time_parseMonthAbbrev(date, string, i) {\n d3_time_monthAbbrevRe.lastIndex = 0;\n var n = d3_time_monthAbbrevRe.exec(string.slice(i));\n return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n function d3_time_parseMonth(date, string, i) {\n d3_time_monthRe.lastIndex = 0;\n var n = d3_time_monthRe.exec(string.slice(i));\n return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n function d3_time_parseLocaleFull(date, string, i) {\n return d3_time_parse(date, d3_time_formats.c.toString(), string, i);\n }\n function d3_time_parseLocaleDate(date, string, i) {\n return d3_time_parse(date, d3_time_formats.x.toString(), string, i);\n }\n function d3_time_parseLocaleTime(date, string, i) {\n return d3_time_parse(date, d3_time_formats.X.toString(), string, i);\n }\n function d3_time_parseAmPm(date, string, i) {\n var n = d3_time_periodLookup.get(string.slice(i, i += 2).toLowerCase());\n return n == null ? -1 : (date.p = n, i);\n }\n return d3_time_format;\n }\n var d3_time_formatPads = {\n \"-\": \"\",\n _: \" \",\n \"0\": \"0\"\n }, d3_time_numberRe = /^\\s*\\d+/, d3_time_percentRe = /^%/;\n function d3_time_formatPad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\", string = (sign ? -value : value) + \"\", length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n }\n function d3_time_formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(d3.requote).join(\"|\") + \")\", \"i\");\n }\n function d3_time_formatLookup(names) {\n var map = new d3_Map(), i = -1, n = names.length;\n while (++i < n) map.set(names[i].toLowerCase(), i);\n return map;\n }\n function d3_time_parseWeekdayNumber(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 1));\n return n ? (date.w = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseWeekNumberSunday(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i));\n return n ? (date.U = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseWeekNumberMonday(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i));\n return n ? (date.W = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseFullYear(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 4));\n return n ? (date.y = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseYear(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1;\n }\n function d3_time_parseZone(date, string, i) {\n return /^[+-]\\d{4}$/.test(string = string.slice(i, i + 5)) ? (date.Z = -string, \n i + 5) : -1;\n }\n function d3_time_expandYear(d) {\n return d + (d > 68 ? 1900 : 2e3);\n }\n function d3_time_parseMonthNumber(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.m = n[0] - 1, i + n[0].length) : -1;\n }\n function d3_time_parseDay(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.d = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseDayOfYear(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 3));\n return n ? (date.j = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseHour24(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.H = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseMinutes(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.M = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseSeconds(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 2));\n return n ? (date.S = +n[0], i + n[0].length) : -1;\n }\n function d3_time_parseMilliseconds(date, string, i) {\n d3_time_numberRe.lastIndex = 0;\n var n = d3_time_numberRe.exec(string.slice(i, i + 3));\n return n ? (date.L = +n[0], i + n[0].length) : -1;\n }\n function d3_time_zone(d) {\n var z = d.getTimezoneOffset(), zs = z > 0 ? \"-\" : \"+\", zh = abs(z) / 60 | 0, zm = abs(z) % 60;\n return zs + d3_time_formatPad(zh, \"0\", 2) + d3_time_formatPad(zm, \"0\", 2);\n }\n function d3_time_parseLiteralPercent(date, string, i) {\n d3_time_percentRe.lastIndex = 0;\n var n = d3_time_percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n }\n function d3_time_formatMulti(formats) {\n var n = formats.length, i = -1;\n while (++i < n) formats[i][0] = this(formats[i][0]);\n return function(date) {\n var i = 0, f = formats[i];\n while (!f[1](date)) f = formats[++i];\n return f[0](date);\n };\n }\n d3.locale = function(locale) {\n return {\n numberFormat: d3_locale_numberFormat(locale),\n timeFormat: d3_locale_timeFormat(locale)\n };\n };\n var d3_locale_enUS = d3.locale({\n decimal: \".\",\n thousands: \",\",\n grouping: [ 3 ],\n currency: [ \"$\", \"\" ],\n dateTime: \"%a %b %e %X %Y\",\n date: \"%m/%d/%Y\",\n time: \"%H:%M:%S\",\n periods: [ \"AM\", \"PM\" ],\n days: [ \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\" ],\n shortDays: [ \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\" ],\n months: [ \"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\" ],\n shortMonths: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\" ]\n });\n d3.format = d3_locale_enUS.numberFormat;\n d3.geo = {};\n function d3_adder() {}\n d3_adder.prototype = {\n s: 0,\n t: 0,\n add: function(y) {\n d3_adderSum(y, this.t, d3_adderTemp);\n d3_adderSum(d3_adderTemp.s, this.s, this);\n if (this.s) this.t += d3_adderTemp.t; else this.s = d3_adderTemp.t;\n },\n reset: function() {\n this.s = this.t = 0;\n },\n valueOf: function() {\n return this.s;\n }\n };\n var d3_adderTemp = new d3_adder();\n function d3_adderSum(a, b, o) {\n var x = o.s = a + b, bv = x - a, av = x - bv;\n o.t = a - av + (b - bv);\n }\n d3.geo.stream = function(object, listener) {\n if (object && d3_geo_streamObjectType.hasOwnProperty(object.type)) {\n d3_geo_streamObjectType[object.type](object, listener);\n } else {\n d3_geo_streamGeometry(object, listener);\n }\n };\n function d3_geo_streamGeometry(geometry, listener) {\n if (geometry && d3_geo_streamGeometryType.hasOwnProperty(geometry.type)) {\n d3_geo_streamGeometryType[geometry.type](geometry, listener);\n }\n }\n var d3_geo_streamObjectType = {\n Feature: function(feature, listener) {\n d3_geo_streamGeometry(feature.geometry, listener);\n },\n FeatureCollection: function(object, listener) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) d3_geo_streamGeometry(features[i].geometry, listener);\n }\n };\n var d3_geo_streamGeometryType = {\n Sphere: function(object, listener) {\n listener.sphere();\n },\n Point: function(object, listener) {\n object = object.coordinates;\n listener.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, listener) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], listener.point(object[0], object[1], object[2]);\n },\n LineString: function(object, listener) {\n d3_geo_streamLine(object.coordinates, listener, 0);\n },\n MultiLineString: function(object, listener) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) d3_geo_streamLine(coordinates[i], listener, 0);\n },\n Polygon: function(object, listener) {\n d3_geo_streamPolygon(object.coordinates, listener);\n },\n MultiPolygon: function(object, listener) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) d3_geo_streamPolygon(coordinates[i], listener);\n },\n GeometryCollection: function(object, listener) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) d3_geo_streamGeometry(geometries[i], listener);\n }\n };\n function d3_geo_streamLine(coordinates, listener, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n listener.lineStart();\n while (++i < n) coordinate = coordinates[i], listener.point(coordinate[0], coordinate[1], coordinate[2]);\n listener.lineEnd();\n }\n function d3_geo_streamPolygon(coordinates, listener) {\n var i = -1, n = coordinates.length;\n listener.polygonStart();\n while (++i < n) d3_geo_streamLine(coordinates[i], listener, 1);\n listener.polygonEnd();\n }\n d3.geo.area = function(object) {\n d3_geo_areaSum = 0;\n d3.geo.stream(object, d3_geo_area);\n return d3_geo_areaSum;\n };\n var d3_geo_areaSum, d3_geo_areaRingSum = new d3_adder();\n var d3_geo_area = {\n sphere: function() {\n d3_geo_areaSum += 4 * π;\n },\n point: d3_noop,\n lineStart: d3_noop,\n lineEnd: d3_noop,\n polygonStart: function() {\n d3_geo_areaRingSum.reset();\n d3_geo_area.lineStart = d3_geo_areaRingStart;\n },\n polygonEnd: function() {\n var area = 2 * d3_geo_areaRingSum;\n d3_geo_areaSum += area < 0 ? 4 * π + area : area;\n d3_geo_area.lineStart = d3_geo_area.lineEnd = d3_geo_area.point = d3_noop;\n }\n };\n function d3_geo_areaRingStart() {\n var λ00, φ00, λ0, cosφ0, sinφ0;\n d3_geo_area.point = function(λ, φ) {\n d3_geo_area.point = nextPoint;\n λ0 = (λ00 = λ) * d3_radians, cosφ0 = Math.cos(φ = (φ00 = φ) * d3_radians / 2 + π / 4), \n sinφ0 = Math.sin(φ);\n };\n function nextPoint(λ, φ) {\n λ *= d3_radians;\n φ = φ * d3_radians / 2 + π / 4;\n var dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(adλ), v = k * sdλ * Math.sin(adλ);\n d3_geo_areaRingSum.add(Math.atan2(v, u));\n λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ;\n }\n d3_geo_area.lineEnd = function() {\n nextPoint(λ00, φ00);\n };\n }\n function d3_geo_cartesian(spherical) {\n var λ = spherical[0], φ = spherical[1], cosφ = Math.cos(φ);\n return [ cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ) ];\n }\n function d3_geo_cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n }\n function d3_geo_cartesianCross(a, b) {\n return [ a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0] ];\n }\n function d3_geo_cartesianAdd(a, b) {\n a[0] += b[0];\n a[1] += b[1];\n a[2] += b[2];\n }\n function d3_geo_cartesianScale(vector, k) {\n return [ vector[0] * k, vector[1] * k, vector[2] * k ];\n }\n function d3_geo_cartesianNormalize(d) {\n var l = Math.sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l;\n d[1] /= l;\n d[2] /= l;\n }\n function d3_geo_spherical(cartesian) {\n return [ Math.atan2(cartesian[1], cartesian[0]), d3_asin(cartesian[2]) ];\n }\n function d3_geo_sphericalEqual(a, b) {\n return abs(a[0] - b[0]) < ε && abs(a[1] - b[1]) < ε;\n }\n d3.geo.bounds = function() {\n var λ0, φ0, λ1, φ1, λ_, λ__, φ__, p0, dλSum, ranges, range;\n var bound = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n bound.point = ringPoint;\n bound.lineStart = ringStart;\n bound.lineEnd = ringEnd;\n dλSum = 0;\n d3_geo_area.polygonStart();\n },\n polygonEnd: function() {\n d3_geo_area.polygonEnd();\n bound.point = point;\n bound.lineStart = lineStart;\n bound.lineEnd = lineEnd;\n if (d3_geo_areaRingSum < 0) λ0 = -(λ1 = 180), φ0 = -(φ1 = 90); else if (dλSum > ε) φ1 = 90; else if (dλSum < -ε) φ0 = -90;\n range[0] = λ0, range[1] = λ1;\n }\n };\n function point(λ, φ) {\n ranges.push(range = [ λ0 = λ, λ1 = λ ]);\n if (φ < φ0) φ0 = φ;\n if (φ > φ1) φ1 = φ;\n }\n function linePoint(λ, φ) {\n var p = d3_geo_cartesian([ λ * d3_radians, φ * d3_radians ]);\n if (p0) {\n var normal = d3_geo_cartesianCross(p0, p), equatorial = [ normal[1], -normal[0], 0 ], inflection = d3_geo_cartesianCross(equatorial, normal);\n d3_geo_cartesianNormalize(inflection);\n inflection = d3_geo_spherical(inflection);\n var dλ = λ - λ_, s = dλ > 0 ? 1 : -1, λi = inflection[0] * d3_degrees * s, antimeridian = abs(dλ) > 180;\n if (antimeridian ^ (s * λ_ < λi && λi < s * λ)) {\n var φi = inflection[1] * d3_degrees;\n if (φi > φ1) φ1 = φi;\n } else if (λi = (λi + 360) % 360 - 180, antimeridian ^ (s * λ_ < λi && λi < s * λ)) {\n var φi = -inflection[1] * d3_degrees;\n if (φi < φ0) φ0 = φi;\n } else {\n if (φ < φ0) φ0 = φ;\n if (φ > φ1) φ1 = φ;\n }\n if (antimeridian) {\n if (λ < λ_) {\n if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;\n } else {\n if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;\n }\n } else {\n if (λ1 >= λ0) {\n if (λ < λ0) λ0 = λ;\n if (λ > λ1) λ1 = λ;\n } else {\n if (λ > λ_) {\n if (angle(λ0, λ) > angle(λ0, λ1)) λ1 = λ;\n } else {\n if (angle(λ, λ1) > angle(λ0, λ1)) λ0 = λ;\n }\n }\n }\n } else {\n point(λ, φ);\n }\n p0 = p, λ_ = λ;\n }\n function lineStart() {\n bound.point = linePoint;\n }\n function lineEnd() {\n range[0] = λ0, range[1] = λ1;\n bound.point = point;\n p0 = null;\n }\n function ringPoint(λ, φ) {\n if (p0) {\n var dλ = λ - λ_;\n dλSum += abs(dλ) > 180 ? dλ + (dλ > 0 ? 360 : -360) : dλ;\n } else λ__ = λ, φ__ = φ;\n d3_geo_area.point(λ, φ);\n linePoint(λ, φ);\n }\n function ringStart() {\n d3_geo_area.lineStart();\n }\n function ringEnd() {\n ringPoint(λ__, φ__);\n d3_geo_area.lineEnd();\n if (abs(dλSum) > ε) λ0 = -(λ1 = 180);\n range[0] = λ0, range[1] = λ1;\n p0 = null;\n }\n function angle(λ0, λ1) {\n return (λ1 -= λ0) < 0 ? λ1 + 360 : λ1;\n }\n function compareRanges(a, b) {\n return a[0] - b[0];\n }\n function withinRange(x, range) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n }\n return function(feature) {\n φ1 = λ1 = -(λ0 = φ0 = Infinity);\n ranges = [];\n d3.geo.stream(feature, bound);\n var n = ranges.length;\n if (n) {\n ranges.sort(compareRanges);\n for (var i = 1, a = ranges[0], b, merged = [ a ]; i < n; ++i) {\n b = ranges[i];\n if (withinRange(b[0], a) || withinRange(b[1], a)) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n var best = -Infinity, dλ;\n for (var n = merged.length - 1, i = 0, a = merged[n], b; i <= n; a = b, ++i) {\n b = merged[i];\n if ((dλ = angle(a[1], b[0])) > best) best = dλ, λ0 = b[0], λ1 = a[1];\n }\n }\n ranges = range = null;\n return λ0 === Infinity || φ0 === Infinity ? [ [ NaN, NaN ], [ NaN, NaN ] ] : [ [ λ0, φ0 ], [ λ1, φ1 ] ];\n };\n }();\n d3.geo.centroid = function(object) {\n d3_geo_centroidW0 = d3_geo_centroidW1 = d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;\n d3.geo.stream(object, d3_geo_centroid);\n var x = d3_geo_centroidX2, y = d3_geo_centroidY2, z = d3_geo_centroidZ2, m = x * x + y * y + z * z;\n if (m < ε2) {\n x = d3_geo_centroidX1, y = d3_geo_centroidY1, z = d3_geo_centroidZ1;\n if (d3_geo_centroidW1 < ε) x = d3_geo_centroidX0, y = d3_geo_centroidY0, z = d3_geo_centroidZ0;\n m = x * x + y * y + z * z;\n if (m < ε2) return [ NaN, NaN ];\n }\n return [ Math.atan2(y, x) * d3_degrees, d3_asin(z / Math.sqrt(m)) * d3_degrees ];\n };\n var d3_geo_centroidW0, d3_geo_centroidW1, d3_geo_centroidX0, d3_geo_centroidY0, d3_geo_centroidZ0, d3_geo_centroidX1, d3_geo_centroidY1, d3_geo_centroidZ1, d3_geo_centroidX2, d3_geo_centroidY2, d3_geo_centroidZ2;\n var d3_geo_centroid = {\n sphere: d3_noop,\n point: d3_geo_centroidPoint,\n lineStart: d3_geo_centroidLineStart,\n lineEnd: d3_geo_centroidLineEnd,\n polygonStart: function() {\n d3_geo_centroid.lineStart = d3_geo_centroidRingStart;\n },\n polygonEnd: function() {\n d3_geo_centroid.lineStart = d3_geo_centroidLineStart;\n }\n };\n function d3_geo_centroidPoint(λ, φ) {\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians);\n d3_geo_centroidPointXYZ(cosφ * Math.cos(λ), cosφ * Math.sin(λ), Math.sin(φ));\n }\n function d3_geo_centroidPointXYZ(x, y, z) {\n ++d3_geo_centroidW0;\n d3_geo_centroidX0 += (x - d3_geo_centroidX0) / d3_geo_centroidW0;\n d3_geo_centroidY0 += (y - d3_geo_centroidY0) / d3_geo_centroidW0;\n d3_geo_centroidZ0 += (z - d3_geo_centroidZ0) / d3_geo_centroidW0;\n }\n function d3_geo_centroidLineStart() {\n var x0, y0, z0;\n d3_geo_centroid.point = function(λ, φ) {\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians);\n x0 = cosφ * Math.cos(λ);\n y0 = cosφ * Math.sin(λ);\n z0 = Math.sin(φ);\n d3_geo_centroid.point = nextPoint;\n d3_geo_centroidPointXYZ(x0, y0, z0);\n };\n function nextPoint(λ, φ) {\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), w = Math.atan2(Math.sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n d3_geo_centroidW1 += w;\n d3_geo_centroidX1 += w * (x0 + (x0 = x));\n d3_geo_centroidY1 += w * (y0 + (y0 = y));\n d3_geo_centroidZ1 += w * (z0 + (z0 = z));\n d3_geo_centroidPointXYZ(x0, y0, z0);\n }\n }\n function d3_geo_centroidLineEnd() {\n d3_geo_centroid.point = d3_geo_centroidPoint;\n }\n function d3_geo_centroidRingStart() {\n var λ00, φ00, x0, y0, z0;\n d3_geo_centroid.point = function(λ, φ) {\n λ00 = λ, φ00 = φ;\n d3_geo_centroid.point = nextPoint;\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians);\n x0 = cosφ * Math.cos(λ);\n y0 = cosφ * Math.sin(λ);\n z0 = Math.sin(φ);\n d3_geo_centroidPointXYZ(x0, y0, z0);\n };\n d3_geo_centroid.lineEnd = function() {\n nextPoint(λ00, φ00);\n d3_geo_centroid.lineEnd = d3_geo_centroidLineEnd;\n d3_geo_centroid.point = d3_geo_centroidPoint;\n };\n function nextPoint(λ, φ) {\n λ *= d3_radians;\n var cosφ = Math.cos(φ *= d3_radians), x = cosφ * Math.cos(λ), y = cosφ * Math.sin(λ), z = Math.sin(φ), cx = y0 * z - z0 * y, cy = z0 * x - x0 * z, cz = x0 * y - y0 * x, m = Math.sqrt(cx * cx + cy * cy + cz * cz), u = x0 * x + y0 * y + z0 * z, v = m && -d3_acos(u) / m, w = Math.atan2(m, u);\n d3_geo_centroidX2 += v * cx;\n d3_geo_centroidY2 += v * cy;\n d3_geo_centroidZ2 += v * cz;\n d3_geo_centroidW1 += w;\n d3_geo_centroidX1 += w * (x0 + (x0 = x));\n d3_geo_centroidY1 += w * (y0 + (y0 = y));\n d3_geo_centroidZ1 += w * (z0 + (z0 = z));\n d3_geo_centroidPointXYZ(x0, y0, z0);\n }\n }\n function d3_geo_compose(a, b) {\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n return compose;\n }\n function d3_true() {\n return true;\n }\n function d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener) {\n var subject = [], clip = [];\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n];\n if (d3_geo_sphericalEqual(p0, p1)) {\n listener.lineStart();\n for (var i = 0; i < n; ++i) listener.point((p0 = segment[i])[0], p0[1]);\n listener.lineEnd();\n return;\n }\n var a = new d3_geo_clipPolygonIntersection(p0, segment, null, true), b = new d3_geo_clipPolygonIntersection(p0, null, a, false);\n a.o = b;\n subject.push(a);\n clip.push(b);\n a = new d3_geo_clipPolygonIntersection(p1, segment, null, false);\n b = new d3_geo_clipPolygonIntersection(p1, null, a, true);\n a.o = b;\n subject.push(a);\n clip.push(b);\n });\n clip.sort(compare);\n d3_geo_clipPolygonLinkCircular(subject);\n d3_geo_clipPolygonLinkCircular(clip);\n if (!subject.length) return;\n for (var i = 0, entry = clipStartInside, n = clip.length; i < n; ++i) {\n clip[i].e = entry = !entry;\n }\n var start = subject[0], points, point;\n while (1) {\n var current = start, isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n listener.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (var i = 0, n = points.length; i < n; ++i) listener.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, listener);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (var i = points.length - 1; i >= 0; --i) listener.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, listener);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n listener.lineEnd();\n }\n }\n function d3_geo_clipPolygonLinkCircular(array) {\n if (!(n = array.length)) return;\n var n, i = 0, a = array[0], b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n }\n function d3_geo_clipPolygonIntersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other;\n this.e = entry;\n this.v = false;\n this.n = this.p = null;\n }\n function d3_geo_clip(pointVisible, clipLine, interpolate, clipStart) {\n return function(rotate, listener) {\n var line = clipLine(listener), rotatedClipStart = rotate.invert(clipStart[0], clipStart[1]);\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = d3.merge(segments);\n var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon);\n if (segments.length) {\n if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener);\n } else if (clipStartInside) {\n if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n listener.lineStart();\n interpolate(null, null, 1, listener);\n listener.lineEnd();\n }\n if (polygonStarted) listener.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n listener.polygonStart();\n listener.lineStart();\n interpolate(null, null, 1, listener);\n listener.lineEnd();\n listener.polygonEnd();\n }\n };\n function point(λ, φ) {\n var point = rotate(λ, φ);\n if (pointVisible(λ = point[0], φ = point[1])) listener.point(λ, φ);\n }\n function pointLine(λ, φ) {\n var point = rotate(λ, φ);\n line.point(point[0], point[1]);\n }\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n var segments;\n var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygonStarted = false, polygon, ring;\n function pointRing(λ, φ) {\n ring.push([ λ, φ ]);\n var point = rotate(λ, φ);\n ringListener.point(point[0], point[1]);\n }\n function ringStart() {\n ringListener.lineStart();\n ring = [];\n }\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringListener.lineEnd();\n var clean = ringListener.clean(), ringSegments = buffer.buffer(), segment, n = ringSegments.length;\n ring.pop();\n polygon.push(ring);\n ring = null;\n if (!n) return;\n if (clean & 1) {\n segment = ringSegments[0];\n var n = segment.length - 1, i = -1, point;\n if (n > 0) {\n if (!polygonStarted) listener.polygonStart(), polygonStarted = true;\n listener.lineStart();\n while (++i < n) listener.point((point = segment[i])[0], point[1]);\n listener.lineEnd();\n }\n return;\n }\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n segments.push(ringSegments.filter(d3_geo_clipSegmentLength1));\n }\n return clip;\n };\n }\n function d3_geo_clipSegmentLength1(segment) {\n return segment.length > 1;\n }\n function d3_geo_clipBufferListener() {\n var lines = [], line;\n return {\n lineStart: function() {\n lines.push(line = []);\n },\n point: function(λ, φ) {\n line.push([ λ, φ ]);\n },\n lineEnd: d3_noop,\n buffer: function() {\n var buffer = lines;\n lines = [];\n line = null;\n return buffer;\n },\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n }\n };\n }\n function d3_geo_clipSort(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]);\n }\n var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -π, -π / 2 ]);\n function d3_geo_clipAntimeridianLine(listener) {\n var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean;\n return {\n lineStart: function() {\n listener.lineStart();\n clean = 1;\n },\n point: function(λ1, φ1) {\n var sλ1 = λ1 > 0 ? π : -π, dλ = abs(λ1 - λ0);\n if (abs(dλ - π) < ε) {\n listener.point(λ0, φ0 = (φ0 + φ1) / 2 > 0 ? halfπ : -halfπ);\n listener.point(sλ0, φ0);\n listener.lineEnd();\n listener.lineStart();\n listener.point(sλ1, φ0);\n listener.point(λ1, φ0);\n clean = 0;\n } else if (sλ0 !== sλ1 && dλ >= π) {\n if (abs(λ0 - sλ0) < ε) λ0 -= sλ0 * ε;\n if (abs(λ1 - sλ1) < ε) λ1 -= sλ1 * ε;\n φ0 = d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1);\n listener.point(sλ0, φ0);\n listener.lineEnd();\n listener.lineStart();\n listener.point(sλ1, φ0);\n clean = 0;\n }\n listener.point(λ0 = λ1, φ0 = φ1);\n sλ0 = sλ1;\n },\n lineEnd: function() {\n listener.lineEnd();\n λ0 = φ0 = NaN;\n },\n clean: function() {\n return 2 - clean;\n }\n };\n }\n function d3_geo_clipAntimeridianIntersect(λ0, φ0, λ1, φ1) {\n var cosφ0, cosφ1, sinλ0_λ1 = Math.sin(λ0 - λ1);\n return abs(sinλ0_λ1) > ε ? Math.atan((Math.sin(φ0) * (cosφ1 = Math.cos(φ1)) * Math.sin(λ1) - Math.sin(φ1) * (cosφ0 = Math.cos(φ0)) * Math.sin(λ0)) / (cosφ0 * cosφ1 * sinλ0_λ1)) : (φ0 + φ1) / 2;\n }\n function d3_geo_clipAntimeridianInterpolate(from, to, direction, listener) {\n var φ;\n if (from == null) {\n φ = direction * halfπ;\n listener.point(-π, φ);\n listener.point(0, φ);\n listener.point(π, φ);\n listener.point(π, 0);\n listener.point(π, -φ);\n listener.point(0, -φ);\n listener.point(-π, -φ);\n listener.point(-π, 0);\n listener.point(-π, φ);\n } else if (abs(from[0] - to[0]) > ε) {\n var s = from[0] < to[0] ? π : -π;\n φ = direction * s / 2;\n listener.point(-s, φ);\n listener.point(0, φ);\n listener.point(s, φ);\n } else {\n listener.point(to[0], to[1]);\n }\n }\n function d3_geo_pointInPolygon(point, polygon) {\n var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0;\n d3_geo_areaRingSum.reset();\n for (var i = 0, n = polygon.length; i < n; ++i) {\n var ring = polygon[i], m = ring.length;\n if (!m) continue;\n var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1;\n while (true) {\n if (j === m) j = 0;\n point = ring[j];\n var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > π, k = sinφ0 * sinφ;\n d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ)));\n polarAngle += antimeridian ? dλ + sdλ * τ : dλ;\n if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) {\n var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point));\n d3_geo_cartesianNormalize(arc);\n var intersection = d3_geo_cartesianCross(meridianNormal, arc);\n d3_geo_cartesianNormalize(intersection);\n var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]);\n if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) {\n winding += antimeridian ^ dλ >= 0 ? 1 : -1;\n }\n }\n if (!j++) break;\n λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point;\n }\n }\n return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < 0) ^ winding & 1;\n }\n function d3_geo_clipCircle(radius) {\n var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians);\n return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -π, radius - π ]);\n function visible(λ, φ) {\n return Math.cos(λ) * Math.cos(φ) > cr;\n }\n function clipLine(listener) {\n var point0, c0, v0, v00, clean;\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(λ, φ) {\n var point1 = [ λ, φ ], point2, v = visible(λ, φ), c = smallRadius ? v ? 0 : code(λ, φ) : v ? code(λ + (λ < 0 ? π : -π), φ) : 0;\n if (!point0 && (v00 = v0 = v)) listener.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (d3_geo_sphericalEqual(point0, point2) || d3_geo_sphericalEqual(point1, point2)) {\n point1[0] += ε;\n point1[1] += ε;\n v = visible(point1[0], point1[1]);\n }\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n listener.lineStart();\n point2 = intersect(point1, point0);\n listener.point(point2[0], point2[1]);\n } else {\n point2 = intersect(point0, point1);\n listener.point(point2[0], point2[1]);\n listener.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n listener.lineStart();\n listener.point(t[0][0], t[0][1]);\n listener.point(t[1][0], t[1][1]);\n listener.lineEnd();\n } else {\n listener.point(t[1][0], t[1][1]);\n listener.lineEnd();\n listener.lineStart();\n listener.point(t[0][0], t[0][1]);\n }\n }\n }\n if (v && (!point0 || !d3_geo_sphericalEqual(point0, point1))) {\n listener.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) listener.lineEnd();\n point0 = null;\n },\n clean: function() {\n return clean | (v00 && v0) << 1;\n }\n };\n }\n function intersect(a, b, two) {\n var pa = d3_geo_cartesian(a), pb = d3_geo_cartesian(b);\n var n1 = [ 1, 0, 0 ], n2 = d3_geo_cartesianCross(pa, pb), n2n2 = d3_geo_cartesianDot(n2, n2), n1n2 = n2[0], determinant = n2n2 - n1n2 * n1n2;\n if (!determinant) return !two && a;\n var c1 = cr * n2n2 / determinant, c2 = -cr * n1n2 / determinant, n1xn2 = d3_geo_cartesianCross(n1, n2), A = d3_geo_cartesianScale(n1, c1), B = d3_geo_cartesianScale(n2, c2);\n d3_geo_cartesianAdd(A, B);\n var u = n1xn2, w = d3_geo_cartesianDot(A, u), uu = d3_geo_cartesianDot(u, u), t2 = w * w - uu * (d3_geo_cartesianDot(A, A) - 1);\n if (t2 < 0) return;\n var t = Math.sqrt(t2), q = d3_geo_cartesianScale(u, (-w - t) / uu);\n d3_geo_cartesianAdd(q, A);\n q = d3_geo_spherical(q);\n if (!two) return q;\n var λ0 = a[0], λ1 = b[0], φ0 = a[1], φ1 = b[1], z;\n if (λ1 < λ0) z = λ0, λ0 = λ1, λ1 = z;\n var δλ = λ1 - λ0, polar = abs(δλ - π) < ε, meridian = polar || δλ < ε;\n if (!polar && φ1 < φ0) z = φ0, φ0 = φ1, φ1 = z;\n if (meridian ? polar ? φ0 + φ1 > 0 ^ q[1] < (abs(q[0] - λ0) < ε ? φ0 : φ1) : φ0 <= q[1] && q[1] <= φ1 : δλ > π ^ (λ0 <= q[0] && q[0] <= λ1)) {\n var q1 = d3_geo_cartesianScale(u, (-w + t) / uu);\n d3_geo_cartesianAdd(q1, A);\n return [ q, d3_geo_spherical(q1) ];\n }\n }\n function code(λ, φ) {\n var r = smallRadius ? radius : π - radius, code = 0;\n if (λ < -r) code |= 1; else if (λ > r) code |= 2;\n if (φ < -r) code |= 4; else if (φ > r) code |= 8;\n return code;\n }\n }\n function d3_geom_clipLine(x0, y0, x1, y1) {\n return function(line) {\n var a = line.a, b = line.b, ax = a.x, ay = a.y, bx = b.x, by = b.y, t0 = 0, t1 = 1, dx = bx - ax, dy = by - ay, r;\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n if (t0 > 0) line.a = {\n x: ax + t0 * dx,\n y: ay + t0 * dy\n };\n if (t1 < 1) line.b = {\n x: ax + t1 * dx,\n y: ay + t1 * dy\n };\n return line;\n };\n }\n var d3_geo_clipExtentMAX = 1e9;\n d3.geo.clipExtent = function() {\n var x0, y0, x1, y1, stream, clip, clipExtent = {\n stream: function(output) {\n if (stream) stream.valid = false;\n stream = clip(output);\n stream.valid = true;\n return stream;\n },\n extent: function(_) {\n if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];\n clip = d3_geo_clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]);\n if (stream) stream.valid = false, stream = null;\n return clipExtent;\n }\n };\n return clipExtent.extent([ [ 0, 0 ], [ 960, 500 ] ]);\n };\n function d3_geo_clipExtent(x0, y0, x1, y1) {\n return function(listener) {\n var listener_ = listener, bufferListener = d3_geo_clipBufferListener(), clipLine = d3_geom_clipLine(x0, y0, x1, y1), segments, polygon, ring;\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n listener = bufferListener;\n segments = [];\n polygon = [];\n clean = true;\n },\n polygonEnd: function() {\n listener = listener_;\n segments = d3.merge(segments);\n var clipStartInside = insidePolygon([ x0, y1 ]), inside = clean && clipStartInside, visible = segments.length;\n if (inside || visible) {\n listener.polygonStart();\n if (inside) {\n listener.lineStart();\n interpolate(null, null, 1, listener);\n listener.lineEnd();\n }\n if (visible) {\n d3_geo_clipPolygon(segments, compare, clipStartInside, interpolate, listener);\n }\n listener.polygonEnd();\n }\n segments = polygon = ring = null;\n }\n };\n function insidePolygon(p) {\n var wn = 0, n = polygon.length, y = p[1];\n for (var i = 0; i < n; ++i) {\n for (var j = 1, v = polygon[i], m = v.length, a = v[0], b; j < m; ++j) {\n b = v[j];\n if (a[1] <= y) {\n if (b[1] > y && d3_cross2d(a, b, p) > 0) ++wn;\n } else {\n if (b[1] <= y && d3_cross2d(a, b, p) < 0) --wn;\n }\n a = b;\n }\n }\n return wn !== 0;\n }\n function interpolate(from, to, direction, listener) {\n var a = 0, a1 = 0;\n if (from == null || (a = corner(from, direction)) !== (a1 = corner(to, direction)) || comparePoints(from, to) < 0 ^ direction > 0) {\n do {\n listener.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n } while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n listener.point(to[0], to[1]);\n }\n }\n function pointVisible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n function point(x, y) {\n if (pointVisible(x, y)) listener.point(x, y);\n }\n var x__, y__, v__, x_, y_, v_, first, clean;\n function lineStart() {\n clip.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferListener.rejoin();\n segments.push(bufferListener.buffer());\n }\n clip.point = point;\n if (v_) listener.lineEnd();\n }\n function linePoint(x, y) {\n x = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, x));\n y = Math.max(-d3_geo_clipExtentMAX, Math.min(d3_geo_clipExtentMAX, y));\n var v = pointVisible(x, y);\n if (polygon) ring.push([ x, y ]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n listener.lineStart();\n listener.point(x, y);\n }\n } else {\n if (v && v_) listener.point(x, y); else {\n var l = {\n a: {\n x: x_,\n y: y_\n },\n b: {\n x: x,\n y: y\n }\n };\n if (clipLine(l)) {\n if (!v_) {\n listener.lineStart();\n listener.point(l.a.x, l.a.y);\n }\n listener.point(l.b.x, l.b.y);\n if (!v) listener.lineEnd();\n clean = false;\n } else if (v) {\n listener.lineStart();\n listener.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n return clip;\n };\n function corner(p, direction) {\n return abs(p[0] - x0) < ε ? direction > 0 ? 0 : 3 : abs(p[0] - x1) < ε ? direction > 0 ? 2 : 1 : abs(p[1] - y0) < ε ? direction > 0 ? 1 : 0 : direction > 0 ? 3 : 2;\n }\n function compare(a, b) {\n return comparePoints(a.x, b.x);\n }\n function comparePoints(a, b) {\n var ca = corner(a, 1), cb = corner(b, 1);\n return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0];\n }\n }\n function d3_geo_conic(projectAt) {\n var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1);\n p.parallels = function(_) {\n if (!arguments.length) return [ φ0 / π * 180, φ1 / π * 180 ];\n return m(φ0 = _[0] * π / 180, φ1 = _[1] * π / 180);\n };\n return p;\n }\n function d3_geo_conicEqualArea(φ0, φ1) {\n var sinφ0 = Math.sin(φ0), n = (sinφ0 + Math.sin(φ1)) / 2, C = 1 + sinφ0 * (2 * n - sinφ0), ρ0 = Math.sqrt(C) / n;\n function forward(λ, φ) {\n var ρ = Math.sqrt(C - 2 * n * Math.sin(φ)) / n;\n return [ ρ * Math.sin(λ *= n), ρ0 - ρ * Math.cos(λ) ];\n }\n forward.invert = function(x, y) {\n var ρ0_y = ρ0 - y;\n return [ Math.atan2(x, ρ0_y) / n, d3_asin((C - (x * x + ρ0_y * ρ0_y) * n * n) / (2 * n)) ];\n };\n return forward;\n }\n (d3.geo.conicEqualArea = function() {\n return d3_geo_conic(d3_geo_conicEqualArea);\n }).raw = d3_geo_conicEqualArea;\n d3.geo.albers = function() {\n return d3.geo.conicEqualArea().rotate([ 96, 0 ]).center([ -.6, 38.7 ]).parallels([ 29.5, 45.5 ]).scale(1070);\n };\n d3.geo.albersUsa = function() {\n var lower48 = d3.geo.albers();\n var alaska = d3.geo.conicEqualArea().rotate([ 154, 0 ]).center([ -2, 58.5 ]).parallels([ 55, 65 ]);\n var hawaii = d3.geo.conicEqualArea().rotate([ 157, 0 ]).center([ -3, 19.9 ]).parallels([ 8, 18 ]);\n var point, pointStream = {\n point: function(x, y) {\n point = [ x, y ];\n }\n }, lower48Point, alaskaPoint, hawaiiPoint;\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n point = null;\n (lower48Point(x, y), point) || (alaskaPoint(x, y), point) || hawaiiPoint(x, y);\n return point;\n }\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(), t = lower48.translate(), x = (coordinates[0] - t[0]) / k, y = (coordinates[1] - t[1]) / k;\n return (y >= .12 && y < .234 && x >= -.425 && x < -.214 ? alaska : y >= .166 && y < .234 && x >= -.214 && x < -.115 ? hawaii : lower48).invert(coordinates);\n };\n albersUsa.stream = function(stream) {\n var lower48Stream = lower48.stream(stream), alaskaStream = alaska.stream(stream), hawaiiStream = hawaii.stream(stream);\n return {\n point: function(x, y) {\n lower48Stream.point(x, y);\n alaskaStream.point(x, y);\n hawaiiStream.point(x, y);\n },\n sphere: function() {\n lower48Stream.sphere();\n alaskaStream.sphere();\n hawaiiStream.sphere();\n },\n lineStart: function() {\n lower48Stream.lineStart();\n alaskaStream.lineStart();\n hawaiiStream.lineStart();\n },\n lineEnd: function() {\n lower48Stream.lineEnd();\n alaskaStream.lineEnd();\n hawaiiStream.lineEnd();\n },\n polygonStart: function() {\n lower48Stream.polygonStart();\n alaskaStream.polygonStart();\n hawaiiStream.polygonStart();\n },\n polygonEnd: function() {\n lower48Stream.polygonEnd();\n alaskaStream.polygonEnd();\n hawaiiStream.polygonEnd();\n }\n };\n };\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_);\n alaska.precision(_);\n hawaii.precision(_);\n return albersUsa;\n };\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_);\n alaska.scale(_ * .35);\n hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n lower48Point = lower48.translate(_).clipExtent([ [ x - .455 * k, y - .238 * k ], [ x + .455 * k, y + .238 * k ] ]).stream(pointStream).point;\n alaskaPoint = alaska.translate([ x - .307 * k, y + .201 * k ]).clipExtent([ [ x - .425 * k + ε, y + .12 * k + ε ], [ x - .214 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;\n hawaiiPoint = hawaii.translate([ x - .205 * k, y + .212 * k ]).clipExtent([ [ x - .214 * k + ε, y + .166 * k + ε ], [ x - .115 * k - ε, y + .234 * k - ε ] ]).stream(pointStream).point;\n return albersUsa;\n };\n return albersUsa.scale(1070);\n };\n var d3_geo_pathAreaSum, d3_geo_pathAreaPolygon, d3_geo_pathArea = {\n point: d3_noop,\n lineStart: d3_noop,\n lineEnd: d3_noop,\n polygonStart: function() {\n d3_geo_pathAreaPolygon = 0;\n d3_geo_pathArea.lineStart = d3_geo_pathAreaRingStart;\n },\n polygonEnd: function() {\n d3_geo_pathArea.lineStart = d3_geo_pathArea.lineEnd = d3_geo_pathArea.point = d3_noop;\n d3_geo_pathAreaSum += abs(d3_geo_pathAreaPolygon / 2);\n }\n };\n function d3_geo_pathAreaRingStart() {\n var x00, y00, x0, y0;\n d3_geo_pathArea.point = function(x, y) {\n d3_geo_pathArea.point = nextPoint;\n x00 = x0 = x, y00 = y0 = y;\n };\n function nextPoint(x, y) {\n d3_geo_pathAreaPolygon += y0 * x - x0 * y;\n x0 = x, y0 = y;\n }\n d3_geo_pathArea.lineEnd = function() {\n nextPoint(x00, y00);\n };\n }\n var d3_geo_pathBoundsX0, d3_geo_pathBoundsY0, d3_geo_pathBoundsX1, d3_geo_pathBoundsY1;\n var d3_geo_pathBounds = {\n point: d3_geo_pathBoundsPoint,\n lineStart: d3_noop,\n lineEnd: d3_noop,\n polygonStart: d3_noop,\n polygonEnd: d3_noop\n };\n function d3_geo_pathBoundsPoint(x, y) {\n if (x < d3_geo_pathBoundsX0) d3_geo_pathBoundsX0 = x;\n if (x > d3_geo_pathBoundsX1) d3_geo_pathBoundsX1 = x;\n if (y < d3_geo_pathBoundsY0) d3_geo_pathBoundsY0 = y;\n if (y > d3_geo_pathBoundsY1) d3_geo_pathBoundsY1 = y;\n }\n function d3_geo_pathBuffer() {\n var pointCircle = d3_geo_pathBufferCircle(4.5), buffer = [];\n var stream = {\n point: point,\n lineStart: function() {\n stream.point = pointLineStart;\n },\n lineEnd: lineEnd,\n polygonStart: function() {\n stream.lineEnd = lineEndPolygon;\n },\n polygonEnd: function() {\n stream.lineEnd = lineEnd;\n stream.point = point;\n },\n pointRadius: function(_) {\n pointCircle = d3_geo_pathBufferCircle(_);\n return stream;\n },\n result: function() {\n if (buffer.length) {\n var result = buffer.join(\"\");\n buffer = [];\n return result;\n }\n }\n };\n function point(x, y) {\n buffer.push(\"M\", x, \",\", y, pointCircle);\n }\n function pointLineStart(x, y) {\n buffer.push(\"M\", x, \",\", y);\n stream.point = pointLine;\n }\n function pointLine(x, y) {\n buffer.push(\"L\", x, \",\", y);\n }\n function lineEnd() {\n stream.point = point;\n }\n function lineEndPolygon() {\n buffer.push(\"Z\");\n }\n return stream;\n }\n function d3_geo_pathBufferCircle(radius) {\n return \"m0,\" + radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius + \"z\";\n }\n var d3_geo_pathCentroid = {\n point: d3_geo_pathCentroidPoint,\n lineStart: d3_geo_pathCentroidLineStart,\n lineEnd: d3_geo_pathCentroidLineEnd,\n polygonStart: function() {\n d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidRingStart;\n },\n polygonEnd: function() {\n d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;\n d3_geo_pathCentroid.lineStart = d3_geo_pathCentroidLineStart;\n d3_geo_pathCentroid.lineEnd = d3_geo_pathCentroidLineEnd;\n }\n };\n function d3_geo_pathCentroidPoint(x, y) {\n d3_geo_centroidX0 += x;\n d3_geo_centroidY0 += y;\n ++d3_geo_centroidZ0;\n }\n function d3_geo_pathCentroidLineStart() {\n var x0, y0;\n d3_geo_pathCentroid.point = function(x, y) {\n d3_geo_pathCentroid.point = nextPoint;\n d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n };\n function nextPoint(x, y) {\n var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);\n d3_geo_centroidX1 += z * (x0 + x) / 2;\n d3_geo_centroidY1 += z * (y0 + y) / 2;\n d3_geo_centroidZ1 += z;\n d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n }\n }\n function d3_geo_pathCentroidLineEnd() {\n d3_geo_pathCentroid.point = d3_geo_pathCentroidPoint;\n }\n function d3_geo_pathCentroidRingStart() {\n var x00, y00, x0, y0;\n d3_geo_pathCentroid.point = function(x, y) {\n d3_geo_pathCentroid.point = nextPoint;\n d3_geo_pathCentroidPoint(x00 = x0 = x, y00 = y0 = y);\n };\n function nextPoint(x, y) {\n var dx = x - x0, dy = y - y0, z = Math.sqrt(dx * dx + dy * dy);\n d3_geo_centroidX1 += z * (x0 + x) / 2;\n d3_geo_centroidY1 += z * (y0 + y) / 2;\n d3_geo_centroidZ1 += z;\n z = y0 * x - x0 * y;\n d3_geo_centroidX2 += z * (x0 + x);\n d3_geo_centroidY2 += z * (y0 + y);\n d3_geo_centroidZ2 += z * 3;\n d3_geo_pathCentroidPoint(x0 = x, y0 = y);\n }\n d3_geo_pathCentroid.lineEnd = function() {\n nextPoint(x00, y00);\n };\n }\n function d3_geo_pathContext(context) {\n var pointRadius = 4.5;\n var stream = {\n point: point,\n lineStart: function() {\n stream.point = pointLineStart;\n },\n lineEnd: lineEnd,\n polygonStart: function() {\n stream.lineEnd = lineEndPolygon;\n },\n polygonEnd: function() {\n stream.lineEnd = lineEnd;\n stream.point = point;\n },\n pointRadius: function(_) {\n pointRadius = _;\n return stream;\n },\n result: d3_noop\n };\n function point(x, y) {\n context.moveTo(x + pointRadius, y);\n context.arc(x, y, pointRadius, 0, τ);\n }\n function pointLineStart(x, y) {\n context.moveTo(x, y);\n stream.point = pointLine;\n }\n function pointLine(x, y) {\n context.lineTo(x, y);\n }\n function lineEnd() {\n stream.point = point;\n }\n function lineEndPolygon() {\n context.closePath();\n }\n return stream;\n }\n function d3_geo_resample(project) {\n var δ2 = .5, cosMinDistance = Math.cos(30 * d3_radians), maxDepth = 16;\n function resample(stream) {\n return (maxDepth ? resampleRecursive : resampleNone)(stream);\n }\n function resampleNone(stream) {\n return d3_geo_transformPoint(stream, function(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n });\n }\n function resampleRecursive(stream) {\n var λ00, φ00, x00, y00, a00, b00, c00, λ0, x0, y0, a0, b0, c0;\n var resample = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n stream.polygonStart();\n resample.lineStart = ringStart;\n },\n polygonEnd: function() {\n stream.polygonEnd();\n resample.lineStart = lineStart;\n }\n };\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n function lineStart() {\n x0 = NaN;\n resample.point = linePoint;\n stream.lineStart();\n }\n function linePoint(λ, φ) {\n var c = d3_geo_cartesian([ λ, φ ]), p = project(λ, φ);\n resampleLineTo(x0, y0, λ0, a0, b0, c0, x0 = p[0], y0 = p[1], λ0 = λ, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n function lineEnd() {\n resample.point = point;\n stream.lineEnd();\n }\n function ringStart() {\n lineStart();\n resample.point = ringPoint;\n resample.lineEnd = ringEnd;\n }\n function ringPoint(λ, φ) {\n linePoint(λ00 = λ, φ00 = φ), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resample.point = linePoint;\n }\n function ringEnd() {\n resampleLineTo(x0, y0, λ0, a0, b0, c0, x00, y00, λ00, a00, b00, c00, maxDepth, stream);\n resample.lineEnd = lineEnd;\n lineEnd();\n }\n return resample;\n }\n function resampleLineTo(x0, y0, λ0, a0, b0, c0, x1, y1, λ1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0, dy = y1 - y0, d2 = dx * dx + dy * dy;\n if (d2 > 4 * δ2 && depth--) {\n var a = a0 + a1, b = b0 + b1, c = c0 + c1, m = Math.sqrt(a * a + b * b + c * c), φ2 = Math.asin(c /= m), λ2 = abs(abs(c) - 1) < ε || abs(λ0 - λ1) < ε ? (λ0 + λ1) / 2 : Math.atan2(b, a), p = project(λ2, φ2), x2 = p[0], y2 = p[1], dx2 = x2 - x0, dy2 = y2 - y0, dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > δ2 || abs((dx * dx2 + dy * dy2) / d2 - .5) > .3 || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) {\n resampleLineTo(x0, y0, λ0, a0, b0, c0, x2, y2, λ2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, λ2, a, b, c, x1, y1, λ1, a1, b1, c1, depth, stream);\n }\n }\n }\n resample.precision = function(_) {\n if (!arguments.length) return Math.sqrt(δ2);\n maxDepth = (δ2 = _ * _) > 0 && 16;\n return resample;\n };\n return resample;\n }\n d3.geo.path = function() {\n var pointRadius = 4.5, projection, context, projectStream, contextStream, cacheStream;\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n if (!cacheStream || !cacheStream.valid) cacheStream = projectStream(contextStream);\n d3.geo.stream(object, cacheStream);\n }\n return contextStream.result();\n }\n path.area = function(object) {\n d3_geo_pathAreaSum = 0;\n d3.geo.stream(object, projectStream(d3_geo_pathArea));\n return d3_geo_pathAreaSum;\n };\n path.centroid = function(object) {\n d3_geo_centroidX0 = d3_geo_centroidY0 = d3_geo_centroidZ0 = d3_geo_centroidX1 = d3_geo_centroidY1 = d3_geo_centroidZ1 = d3_geo_centroidX2 = d3_geo_centroidY2 = d3_geo_centroidZ2 = 0;\n d3.geo.stream(object, projectStream(d3_geo_pathCentroid));\n return d3_geo_centroidZ2 ? [ d3_geo_centroidX2 / d3_geo_centroidZ2, d3_geo_centroidY2 / d3_geo_centroidZ2 ] : d3_geo_centroidZ1 ? [ d3_geo_centroidX1 / d3_geo_centroidZ1, d3_geo_centroidY1 / d3_geo_centroidZ1 ] : d3_geo_centroidZ0 ? [ d3_geo_centroidX0 / d3_geo_centroidZ0, d3_geo_centroidY0 / d3_geo_centroidZ0 ] : [ NaN, NaN ];\n };\n path.bounds = function(object) {\n d3_geo_pathBoundsX1 = d3_geo_pathBoundsY1 = -(d3_geo_pathBoundsX0 = d3_geo_pathBoundsY0 = Infinity);\n d3.geo.stream(object, projectStream(d3_geo_pathBounds));\n return [ [ d3_geo_pathBoundsX0, d3_geo_pathBoundsY0 ], [ d3_geo_pathBoundsX1, d3_geo_pathBoundsY1 ] ];\n };\n path.projection = function(_) {\n if (!arguments.length) return projection;\n projectStream = (projection = _) ? _.stream || d3_geo_pathProjectStream(_) : d3_identity;\n return reset();\n };\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = (context = _) == null ? new d3_geo_pathBuffer() : new d3_geo_pathContext(_);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return reset();\n };\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n function reset() {\n cacheStream = null;\n return path;\n }\n return path.projection(d3.geo.albersUsa()).context(null);\n };\n function d3_geo_pathProjectStream(project) {\n var resample = d3_geo_resample(function(x, y) {\n return project([ x * d3_degrees, y * d3_degrees ]);\n });\n return function(stream) {\n return d3_geo_projectionRadians(resample(stream));\n };\n }\n d3.geo.transform = function(methods) {\n return {\n stream: function(stream) {\n var transform = new d3_geo_transform(stream);\n for (var k in methods) transform[k] = methods[k];\n return transform;\n }\n };\n };\n function d3_geo_transform(stream) {\n this.stream = stream;\n }\n d3_geo_transform.prototype = {\n point: function(x, y) {\n this.stream.point(x, y);\n },\n sphere: function() {\n this.stream.sphere();\n },\n lineStart: function() {\n this.stream.lineStart();\n },\n lineEnd: function() {\n this.stream.lineEnd();\n },\n polygonStart: function() {\n this.stream.polygonStart();\n },\n polygonEnd: function() {\n this.stream.polygonEnd();\n }\n };\n function d3_geo_transformPoint(stream, point) {\n return {\n point: point,\n sphere: function() {\n stream.sphere();\n },\n lineStart: function() {\n stream.lineStart();\n },\n lineEnd: function() {\n stream.lineEnd();\n },\n polygonStart: function() {\n stream.polygonStart();\n },\n polygonEnd: function() {\n stream.polygonEnd();\n }\n };\n }\n d3.geo.projection = d3_geo_projection;\n d3.geo.projectionMutator = d3_geo_projectionMutator;\n function d3_geo_projection(project) {\n return d3_geo_projectionMutator(function() {\n return project;\n })();\n }\n function d3_geo_projectionMutator(projectAt) {\n var project, rotate, projectRotate, projectResample = d3_geo_resample(function(x, y) {\n x = project(x, y);\n return [ x[0] * k + δx, δy - x[1] * k ];\n }), k = 150, x = 480, y = 250, λ = 0, φ = 0, δλ = 0, δφ = 0, δγ = 0, δx, δy, preclip = d3_geo_clipAntimeridian, postclip = d3_identity, clipAngle = null, clipExtent = null, stream;\n function projection(point) {\n point = projectRotate(point[0] * d3_radians, point[1] * d3_radians);\n return [ point[0] * k + δx, δy - point[1] * k ];\n }\n function invert(point) {\n point = projectRotate.invert((point[0] - δx) / k, (δy - point[1]) / k);\n return point && [ point[0] * d3_degrees, point[1] * d3_degrees ];\n }\n projection.stream = function(output) {\n if (stream) stream.valid = false;\n stream = d3_geo_projectionRadians(preclip(rotate, projectResample(postclip(output))));\n stream.valid = true;\n return stream;\n };\n projection.clipAngle = function(_) {\n if (!arguments.length) return clipAngle;\n preclip = _ == null ? (clipAngle = _, d3_geo_clipAntimeridian) : d3_geo_clipCircle((clipAngle = +_) * d3_radians);\n return invalidate();\n };\n projection.clipExtent = function(_) {\n if (!arguments.length) return clipExtent;\n clipExtent = _;\n postclip = _ ? d3_geo_clipExtent(_[0][0], _[0][1], _[1][0], _[1][1]) : d3_identity;\n return invalidate();\n };\n projection.scale = function(_) {\n if (!arguments.length) return k;\n k = +_;\n return reset();\n };\n projection.translate = function(_) {\n if (!arguments.length) return [ x, y ];\n x = +_[0];\n y = +_[1];\n return reset();\n };\n projection.center = function(_) {\n if (!arguments.length) return [ λ * d3_degrees, φ * d3_degrees ];\n λ = _[0] % 360 * d3_radians;\n φ = _[1] % 360 * d3_radians;\n return reset();\n };\n projection.rotate = function(_) {\n if (!arguments.length) return [ δλ * d3_degrees, δφ * d3_degrees, δγ * d3_degrees ];\n δλ = _[0] % 360 * d3_radians;\n δφ = _[1] % 360 * d3_radians;\n δγ = _.length > 2 ? _[2] % 360 * d3_radians : 0;\n return reset();\n };\n d3.rebind(projection, projectResample, \"precision\");\n function reset() {\n projectRotate = d3_geo_compose(rotate = d3_geo_rotation(δλ, δφ, δγ), project);\n var center = project(λ, φ);\n δx = x - center[0] * k;\n δy = y + center[1] * k;\n return invalidate();\n }\n function invalidate() {\n if (stream) stream.valid = false, stream = null;\n return projection;\n }\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return reset();\n };\n }\n function d3_geo_projectionRadians(stream) {\n return d3_geo_transformPoint(stream, function(x, y) {\n stream.point(x * d3_radians, y * d3_radians);\n });\n }\n function d3_geo_equirectangular(λ, φ) {\n return [ λ, φ ];\n }\n (d3.geo.equirectangular = function() {\n return d3_geo_projection(d3_geo_equirectangular);\n }).raw = d3_geo_equirectangular.invert = d3_geo_equirectangular;\n d3.geo.rotation = function(rotate) {\n rotate = d3_geo_rotation(rotate[0] % 360 * d3_radians, rotate[1] * d3_radians, rotate.length > 2 ? rotate[2] * d3_radians : 0);\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * d3_radians, coordinates[1] * d3_radians);\n return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;\n }\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * d3_radians, coordinates[1] * d3_radians);\n return coordinates[0] *= d3_degrees, coordinates[1] *= d3_degrees, coordinates;\n };\n return forward;\n };\n function d3_geo_identityRotation(λ, φ) {\n return [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];\n }\n d3_geo_identityRotation.invert = d3_geo_equirectangular;\n function d3_geo_rotation(δλ, δφ, δγ) {\n return δλ ? δφ || δγ ? d3_geo_compose(d3_geo_rotationλ(δλ), d3_geo_rotationφγ(δφ, δγ)) : d3_geo_rotationλ(δλ) : δφ || δγ ? d3_geo_rotationφγ(δφ, δγ) : d3_geo_identityRotation;\n }\n function d3_geo_forwardRotationλ(δλ) {\n return function(λ, φ) {\n return λ += δλ, [ λ > π ? λ - τ : λ < -π ? λ + τ : λ, φ ];\n };\n }\n function d3_geo_rotationλ(δλ) {\n var rotation = d3_geo_forwardRotationλ(δλ);\n rotation.invert = d3_geo_forwardRotationλ(-δλ);\n return rotation;\n }\n function d3_geo_rotationφγ(δφ, δγ) {\n var cosδφ = Math.cos(δφ), sinδφ = Math.sin(δφ), cosδγ = Math.cos(δγ), sinδγ = Math.sin(δγ);\n function rotation(λ, φ) {\n var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδφ + x * sinδφ;\n return [ Math.atan2(y * cosδγ - k * sinδγ, x * cosδφ - z * sinδφ), d3_asin(k * cosδγ + y * sinδγ) ];\n }\n rotation.invert = function(λ, φ) {\n var cosφ = Math.cos(φ), x = Math.cos(λ) * cosφ, y = Math.sin(λ) * cosφ, z = Math.sin(φ), k = z * cosδγ - y * sinδγ;\n return [ Math.atan2(y * cosδγ + z * sinδγ, x * cosδφ + k * sinδφ), d3_asin(k * cosδφ - x * sinδφ) ];\n };\n return rotation;\n }\n d3.geo.circle = function() {\n var origin = [ 0, 0 ], angle, precision = 6, interpolate;\n function circle() {\n var center = typeof origin === \"function\" ? origin.apply(this, arguments) : origin, rotate = d3_geo_rotation(-center[0] * d3_radians, -center[1] * d3_radians, 0).invert, ring = [];\n interpolate(null, null, 1, {\n point: function(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= d3_degrees, x[1] *= d3_degrees;\n }\n });\n return {\n type: \"Polygon\",\n coordinates: [ ring ]\n };\n }\n circle.origin = function(x) {\n if (!arguments.length) return origin;\n origin = x;\n return circle;\n };\n circle.angle = function(x) {\n if (!arguments.length) return angle;\n interpolate = d3_geo_circleInterpolate((angle = +x) * d3_radians, precision * d3_radians);\n return circle;\n };\n circle.precision = function(_) {\n if (!arguments.length) return precision;\n interpolate = d3_geo_circleInterpolate(angle * d3_radians, (precision = +_) * d3_radians);\n return circle;\n };\n return circle.angle(90);\n };\n function d3_geo_circleInterpolate(radius, precision) {\n var cr = Math.cos(radius), sr = Math.sin(radius);\n return function(from, to, direction, listener) {\n var step = direction * precision;\n if (from != null) {\n from = d3_geo_circleAngle(cr, from);\n to = d3_geo_circleAngle(cr, to);\n if (direction > 0 ? from < to : from > to) from += direction * τ;\n } else {\n from = radius + direction * τ;\n to = radius - .5 * step;\n }\n for (var point, t = from; direction > 0 ? t > to : t < to; t -= step) {\n listener.point((point = d3_geo_spherical([ cr, -sr * Math.cos(t), -sr * Math.sin(t) ]))[0], point[1]);\n }\n };\n }\n function d3_geo_circleAngle(cr, point) {\n var a = d3_geo_cartesian(point);\n a[0] -= cr;\n d3_geo_cartesianNormalize(a);\n var angle = d3_acos(-a[1]);\n return ((-a[2] < 0 ? -angle : angle) + 2 * Math.PI - ε) % (2 * Math.PI);\n }\n d3.geo.distance = function(a, b) {\n var Δλ = (b[0] - a[0]) * d3_radians, φ0 = a[1] * d3_radians, φ1 = b[1] * d3_radians, sinΔλ = Math.sin(Δλ), cosΔλ = Math.cos(Δλ), sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), sinφ1 = Math.sin(φ1), cosφ1 = Math.cos(φ1), t;\n return Math.atan2(Math.sqrt((t = cosφ1 * sinΔλ) * t + (t = cosφ0 * sinφ1 - sinφ0 * cosφ1 * cosΔλ) * t), sinφ0 * sinφ1 + cosφ0 * cosφ1 * cosΔλ);\n };\n d3.geo.graticule = function() {\n var x1, x0, X1, X0, y1, y0, Y1, Y0, dx = 10, dy = dx, DX = 90, DY = 360, x, y, X, Y, precision = 2.5;\n function graticule() {\n return {\n type: \"MultiLineString\",\n coordinates: lines()\n };\n }\n function lines() {\n return d3.range(Math.ceil(X0 / DX) * DX, X1, DX).map(X).concat(d3.range(Math.ceil(Y0 / DY) * DY, Y1, DY).map(Y)).concat(d3.range(Math.ceil(x0 / dx) * dx, x1, dx).filter(function(x) {\n return abs(x % DX) > ε;\n }).map(x)).concat(d3.range(Math.ceil(y0 / dy) * dy, y1, dy).filter(function(y) {\n return abs(y % DY) > ε;\n }).map(y));\n }\n graticule.lines = function() {\n return lines().map(function(coordinates) {\n return {\n type: \"LineString\",\n coordinates: coordinates\n };\n });\n };\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [ X(X0).concat(Y(Y1).slice(1), X(X1).reverse().slice(1), Y(Y0).reverse().slice(1)) ]\n };\n };\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.minorExtent();\n return graticule.majorExtent(_).minorExtent(_);\n };\n graticule.majorExtent = function(_) {\n if (!arguments.length) return [ [ X0, Y0 ], [ X1, Y1 ] ];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n graticule.minorExtent = function(_) {\n if (!arguments.length) return [ [ x0, y0 ], [ x1, y1 ] ];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n graticule.step = function(_) {\n if (!arguments.length) return graticule.minorStep();\n return graticule.majorStep(_).minorStep(_);\n };\n graticule.majorStep = function(_) {\n if (!arguments.length) return [ DX, DY ];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n graticule.minorStep = function(_) {\n if (!arguments.length) return [ dx, dy ];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = d3_geo_graticuleX(y0, y1, 90);\n y = d3_geo_graticuleY(x0, x1, precision);\n X = d3_geo_graticuleX(Y0, Y1, 90);\n Y = d3_geo_graticuleY(X0, X1, precision);\n return graticule;\n };\n return graticule.majorExtent([ [ -180, -90 + ε ], [ 180, 90 - ε ] ]).minorExtent([ [ -180, -80 - ε ], [ 180, 80 + ε ] ]);\n };\n function d3_geo_graticuleX(y0, y1, dy) {\n var y = d3.range(y0, y1 - ε, dy).concat(y1);\n return function(x) {\n return y.map(function(y) {\n return [ x, y ];\n });\n };\n }\n function d3_geo_graticuleY(x0, x1, dx) {\n var x = d3.range(x0, x1 - ε, dx).concat(x1);\n return function(y) {\n return x.map(function(x) {\n return [ x, y ];\n });\n };\n }\n function d3_source(d) {\n return d.source;\n }\n function d3_target(d) {\n return d.target;\n }\n d3.geo.greatArc = function() {\n var source = d3_source, source_, target = d3_target, target_;\n function greatArc() {\n return {\n type: \"LineString\",\n coordinates: [ source_ || source.apply(this, arguments), target_ || target.apply(this, arguments) ]\n };\n }\n greatArc.distance = function() {\n return d3.geo.distance(source_ || source.apply(this, arguments), target_ || target.apply(this, arguments));\n };\n greatArc.source = function(_) {\n if (!arguments.length) return source;\n source = _, source_ = typeof _ === \"function\" ? null : _;\n return greatArc;\n };\n greatArc.target = function(_) {\n if (!arguments.length) return target;\n target = _, target_ = typeof _ === \"function\" ? null : _;\n return greatArc;\n };\n greatArc.precision = function() {\n return arguments.length ? greatArc : 0;\n };\n return greatArc;\n };\n d3.geo.interpolate = function(source, target) {\n return d3_geo_interpolate(source[0] * d3_radians, source[1] * d3_radians, target[0] * d3_radians, target[1] * d3_radians);\n };\n function d3_geo_interpolate(x0, y0, x1, y1) {\n var cy0 = Math.cos(y0), sy0 = Math.sin(y0), cy1 = Math.cos(y1), sy1 = Math.sin(y1), kx0 = cy0 * Math.cos(x0), ky0 = cy0 * Math.sin(x0), kx1 = cy1 * Math.cos(x1), ky1 = cy1 * Math.sin(x1), d = 2 * Math.asin(Math.sqrt(d3_haversin(y1 - y0) + cy0 * cy1 * d3_haversin(x1 - x0))), k = 1 / Math.sin(d);\n var interpolate = d ? function(t) {\n var B = Math.sin(t *= d) * k, A = Math.sin(d - t) * k, x = A * kx0 + B * kx1, y = A * ky0 + B * ky1, z = A * sy0 + B * sy1;\n return [ Math.atan2(y, x) * d3_degrees, Math.atan2(z, Math.sqrt(x * x + y * y)) * d3_degrees ];\n } : function() {\n return [ x0 * d3_degrees, y0 * d3_degrees ];\n };\n interpolate.distance = d;\n return interpolate;\n }\n d3.geo.length = function(object) {\n d3_geo_lengthSum = 0;\n d3.geo.stream(object, d3_geo_length);\n return d3_geo_lengthSum;\n };\n var d3_geo_lengthSum;\n var d3_geo_length = {\n sphere: d3_noop,\n point: d3_noop,\n lineStart: d3_geo_lengthLineStart,\n lineEnd: d3_noop,\n polygonStart: d3_noop,\n polygonEnd: d3_noop\n };\n function d3_geo_lengthLineStart() {\n var λ0, sinφ0, cosφ0;\n d3_geo_length.point = function(λ, φ) {\n λ0 = λ * d3_radians, sinφ0 = Math.sin(φ *= d3_radians), cosφ0 = Math.cos(φ);\n d3_geo_length.point = nextPoint;\n };\n d3_geo_length.lineEnd = function() {\n d3_geo_length.point = d3_geo_length.lineEnd = d3_noop;\n };\n function nextPoint(λ, φ) {\n var sinφ = Math.sin(φ *= d3_radians), cosφ = Math.cos(φ), t = abs((λ *= d3_radians) - λ0), cosΔλ = Math.cos(t);\n d3_geo_lengthSum += Math.atan2(Math.sqrt((t = cosφ * Math.sin(t)) * t + (t = cosφ0 * sinφ - sinφ0 * cosφ * cosΔλ) * t), sinφ0 * sinφ + cosφ0 * cosφ * cosΔλ);\n λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ;\n }\n }\n function d3_geo_azimuthal(scale, angle) {\n function azimuthal(λ, φ) {\n var cosλ = Math.cos(λ), cosφ = Math.cos(φ), k = scale(cosλ * cosφ);\n return [ k * cosφ * Math.sin(λ), k * Math.sin(φ) ];\n }\n azimuthal.invert = function(x, y) {\n var ρ = Math.sqrt(x * x + y * y), c = angle(ρ), sinc = Math.sin(c), cosc = Math.cos(c);\n return [ Math.atan2(x * sinc, ρ * cosc), Math.asin(ρ && y * sinc / ρ) ];\n };\n return azimuthal;\n }\n var d3_geo_azimuthalEqualArea = d3_geo_azimuthal(function(cosλcosφ) {\n return Math.sqrt(2 / (1 + cosλcosφ));\n }, function(ρ) {\n return 2 * Math.asin(ρ / 2);\n });\n (d3.geo.azimuthalEqualArea = function() {\n return d3_geo_projection(d3_geo_azimuthalEqualArea);\n }).raw = d3_geo_azimuthalEqualArea;\n var d3_geo_azimuthalEquidistant = d3_geo_azimuthal(function(cosλcosφ) {\n var c = Math.acos(cosλcosφ);\n return c && c / Math.sin(c);\n }, d3_identity);\n (d3.geo.azimuthalEquidistant = function() {\n return d3_geo_projection(d3_geo_azimuthalEquidistant);\n }).raw = d3_geo_azimuthalEquidistant;\n function d3_geo_conicConformal(φ0, φ1) {\n var cosφ0 = Math.cos(φ0), t = function(φ) {\n return Math.tan(π / 4 + φ / 2);\n }, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n;\n if (!n) return d3_geo_mercator;\n function forward(λ, φ) {\n if (F > 0) {\n if (φ < -halfπ + ε) φ = -halfπ + ε;\n } else {\n if (φ > halfπ - ε) φ = halfπ - ε;\n }\n var ρ = F / Math.pow(t(φ), n);\n return [ ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ) ];\n }\n forward.invert = function(x, y) {\n var ρ0_y = F - y, ρ = d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y);\n return [ Math.atan2(x, ρ0_y) / n, 2 * Math.atan(Math.pow(F / ρ, 1 / n)) - halfπ ];\n };\n return forward;\n }\n (d3.geo.conicConformal = function() {\n return d3_geo_conic(d3_geo_conicConformal);\n }).raw = d3_geo_conicConformal;\n function d3_geo_conicEquidistant(φ0, φ1) {\n var cosφ0 = Math.cos(φ0), n = φ0 === φ1 ? Math.sin(φ0) : (cosφ0 - Math.cos(φ1)) / (φ1 - φ0), G = cosφ0 / n + φ0;\n if (abs(n) < ε) return d3_geo_equirectangular;\n function forward(λ, φ) {\n var ρ = G - φ;\n return [ ρ * Math.sin(n * λ), G - ρ * Math.cos(n * λ) ];\n }\n forward.invert = function(x, y) {\n var ρ0_y = G - y;\n return [ Math.atan2(x, ρ0_y) / n, G - d3_sgn(n) * Math.sqrt(x * x + ρ0_y * ρ0_y) ];\n };\n return forward;\n }\n (d3.geo.conicEquidistant = function() {\n return d3_geo_conic(d3_geo_conicEquidistant);\n }).raw = d3_geo_conicEquidistant;\n var d3_geo_gnomonic = d3_geo_azimuthal(function(cosλcosφ) {\n return 1 / cosλcosφ;\n }, Math.atan);\n (d3.geo.gnomonic = function() {\n return d3_geo_projection(d3_geo_gnomonic);\n }).raw = d3_geo_gnomonic;\n function d3_geo_mercator(λ, φ) {\n return [ λ, Math.log(Math.tan(π / 4 + φ / 2)) ];\n }\n d3_geo_mercator.invert = function(x, y) {\n return [ x, 2 * Math.atan(Math.exp(y)) - halfπ ];\n };\n function d3_geo_mercatorProjection(project) {\n var m = d3_geo_projection(project), scale = m.scale, translate = m.translate, clipExtent = m.clipExtent, clipAuto;\n m.scale = function() {\n var v = scale.apply(m, arguments);\n return v === m ? clipAuto ? m.clipExtent(null) : m : v;\n };\n m.translate = function() {\n var v = translate.apply(m, arguments);\n return v === m ? clipAuto ? m.clipExtent(null) : m : v;\n };\n m.clipExtent = function(_) {\n var v = clipExtent.apply(m, arguments);\n if (v === m) {\n if (clipAuto = _ == null) {\n var k = π * scale(), t = translate();\n clipExtent([ [ t[0] - k, t[1] - k ], [ t[0] + k, t[1] + k ] ]);\n }\n } else if (clipAuto) {\n v = null;\n }\n return v;\n };\n return m.clipExtent(null);\n }\n (d3.geo.mercator = function() {\n return d3_geo_mercatorProjection(d3_geo_mercator);\n }).raw = d3_geo_mercator;\n var d3_geo_orthographic = d3_geo_azimuthal(function() {\n return 1;\n }, Math.asin);\n (d3.geo.orthographic = function() {\n return d3_geo_projection(d3_geo_orthographic);\n }).raw = d3_geo_orthographic;\n var d3_geo_stereographic = d3_geo_azimuthal(function(cosλcosφ) {\n return 1 / (1 + cosλcosφ);\n }, function(ρ) {\n return 2 * Math.atan(ρ);\n });\n (d3.geo.stereographic = function() {\n return d3_geo_projection(d3_geo_stereographic);\n }).raw = d3_geo_stereographic;\n function d3_geo_transverseMercator(λ, φ) {\n return [ Math.log(Math.tan(π / 4 + φ / 2)), -λ ];\n }\n d3_geo_transverseMercator.invert = function(x, y) {\n return [ -y, 2 * Math.atan(Math.exp(x)) - halfπ ];\n };\n (d3.geo.transverseMercator = function() {\n var projection = d3_geo_mercatorProjection(d3_geo_transverseMercator), center = projection.center, rotate = projection.rotate;\n projection.center = function(_) {\n return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ _[1], -_[0] ]);\n };\n projection.rotate = function(_) {\n return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(), \n [ _[0], _[1], _[2] - 90 ]);\n };\n return rotate([ 0, 0, 90 ]);\n }).raw = d3_geo_transverseMercator;\n d3.geom = {};\n function d3_geom_pointX(d) {\n return d[0];\n }\n function d3_geom_pointY(d) {\n return d[1];\n }\n d3.geom.hull = function(vertices) {\n var x = d3_geom_pointX, y = d3_geom_pointY;\n if (arguments.length) return hull(vertices);\n function hull(data) {\n if (data.length < 3) return [];\n var fx = d3_functor(x), fy = d3_functor(y), i, n = data.length, points = [], flippedPoints = [];\n for (i = 0; i < n; i++) {\n points.push([ +fx.call(this, data[i], i), +fy.call(this, data[i], i), i ]);\n }\n points.sort(d3_geom_hullOrder);\n for (i = 0; i < n; i++) flippedPoints.push([ points[i][0], -points[i][1] ]);\n var upper = d3_geom_hullUpper(points), lower = d3_geom_hullUpper(flippedPoints);\n var skipLeft = lower[0] === upper[0], skipRight = lower[lower.length - 1] === upper[upper.length - 1], polygon = [];\n for (i = upper.length - 1; i >= 0; --i) polygon.push(data[points[upper[i]][2]]);\n for (i = +skipLeft; i < lower.length - skipRight; ++i) polygon.push(data[points[lower[i]][2]]);\n return polygon;\n }\n hull.x = function(_) {\n return arguments.length ? (x = _, hull) : x;\n };\n hull.y = function(_) {\n return arguments.length ? (y = _, hull) : y;\n };\n return hull;\n };\n function d3_geom_hullUpper(points) {\n var n = points.length, hull = [ 0, 1 ], hs = 2;\n for (var i = 2; i < n; i++) {\n while (hs > 1 && d3_cross2d(points[hull[hs - 2]], points[hull[hs - 1]], points[i]) <= 0) --hs;\n hull[hs++] = i;\n }\n return hull.slice(0, hs);\n }\n function d3_geom_hullOrder(a, b) {\n return a[0] - b[0] || a[1] - b[1];\n }\n d3.geom.polygon = function(coordinates) {\n d3_subclass(coordinates, d3_geom_polygonPrototype);\n return coordinates;\n };\n var d3_geom_polygonPrototype = d3.geom.polygon.prototype = [];\n d3_geom_polygonPrototype.area = function() {\n var i = -1, n = this.length, a, b = this[n - 1], area = 0;\n while (++i < n) {\n a = b;\n b = this[i];\n area += a[1] * b[0] - a[0] * b[1];\n }\n return area * .5;\n };\n d3_geom_polygonPrototype.centroid = function(k) {\n var i = -1, n = this.length, x = 0, y = 0, a, b = this[n - 1], c;\n if (!arguments.length) k = -1 / (6 * this.area());\n while (++i < n) {\n a = b;\n b = this[i];\n c = a[0] * b[1] - b[0] * a[1];\n x += (a[0] + b[0]) * c;\n y += (a[1] + b[1]) * c;\n }\n return [ x * k, y * k ];\n };\n d3_geom_polygonPrototype.clip = function(subject) {\n var input, closed = d3_geom_polygonClosed(subject), i = -1, n = this.length - d3_geom_polygonClosed(this), j, m, a = this[n - 1], b, c, d;\n while (++i < n) {\n input = subject.slice();\n subject.length = 0;\n b = this[i];\n c = input[(m = input.length - closed) - 1];\n j = -1;\n while (++j < m) {\n d = input[j];\n if (d3_geom_polygonInside(d, a, b)) {\n if (!d3_geom_polygonInside(c, a, b)) {\n subject.push(d3_geom_polygonIntersect(c, d, a, b));\n }\n subject.push(d);\n } else if (d3_geom_polygonInside(c, a, b)) {\n subject.push(d3_geom_polygonIntersect(c, d, a, b));\n }\n c = d;\n }\n if (closed) subject.push(subject[0]);\n a = b;\n }\n return subject;\n };\n function d3_geom_polygonInside(p, a, b) {\n return (b[0] - a[0]) * (p[1] - a[1]) < (b[1] - a[1]) * (p[0] - a[0]);\n }\n function d3_geom_polygonIntersect(c, d, a, b) {\n var x1 = c[0], x3 = a[0], x21 = d[0] - x1, x43 = b[0] - x3, y1 = c[1], y3 = a[1], y21 = d[1] - y1, y43 = b[1] - y3, ua = (x43 * (y1 - y3) - y43 * (x1 - x3)) / (y43 * x21 - x43 * y21);\n return [ x1 + ua * x21, y1 + ua * y21 ];\n }\n function d3_geom_polygonClosed(coordinates) {\n var a = coordinates[0], b = coordinates[coordinates.length - 1];\n return !(a[0] - b[0] || a[1] - b[1]);\n }\n var d3_geom_voronoiEdges, d3_geom_voronoiCells, d3_geom_voronoiBeaches, d3_geom_voronoiBeachPool = [], d3_geom_voronoiFirstCircle, d3_geom_voronoiCircles, d3_geom_voronoiCirclePool = [];\n function d3_geom_voronoiBeach() {\n d3_geom_voronoiRedBlackNode(this);\n this.edge = this.site = this.circle = null;\n }\n function d3_geom_voronoiCreateBeach(site) {\n var beach = d3_geom_voronoiBeachPool.pop() || new d3_geom_voronoiBeach();\n beach.site = site;\n return beach;\n }\n function d3_geom_voronoiDetachBeach(beach) {\n d3_geom_voronoiDetachCircle(beach);\n d3_geom_voronoiBeaches.remove(beach);\n d3_geom_voronoiBeachPool.push(beach);\n d3_geom_voronoiRedBlackNode(beach);\n }\n function d3_geom_voronoiRemoveBeach(beach) {\n var circle = beach.circle, x = circle.x, y = circle.cy, vertex = {\n x: x,\n y: y\n }, previous = beach.P, next = beach.N, disappearing = [ beach ];\n d3_geom_voronoiDetachBeach(beach);\n var lArc = previous;\n while (lArc.circle && abs(x - lArc.circle.x) < ε && abs(y - lArc.circle.cy) < ε) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n d3_geom_voronoiDetachBeach(lArc);\n lArc = previous;\n }\n disappearing.unshift(lArc);\n d3_geom_voronoiDetachCircle(lArc);\n var rArc = next;\n while (rArc.circle && abs(x - rArc.circle.x) < ε && abs(y - rArc.circle.cy) < ε) {\n next = rArc.N;\n disappearing.push(rArc);\n d3_geom_voronoiDetachBeach(rArc);\n rArc = next;\n }\n disappearing.push(rArc);\n d3_geom_voronoiDetachCircle(rArc);\n var nArcs = disappearing.length, iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n d3_geom_voronoiSetEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, rArc.site, null, vertex);\n d3_geom_voronoiAttachCircle(lArc);\n d3_geom_voronoiAttachCircle(rArc);\n }\n function d3_geom_voronoiAddBeach(site) {\n var x = site.x, directrix = site.y, lArc, rArc, dxl, dxr, node = d3_geom_voronoiBeaches._;\n while (node) {\n dxl = d3_geom_voronoiLeftBreakPoint(node, directrix) - x;\n if (dxl > ε) node = node.L; else {\n dxr = x - d3_geom_voronoiRightBreakPoint(node, directrix);\n if (dxr > ε) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -ε) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -ε) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n var newArc = d3_geom_voronoiCreateBeach(site);\n d3_geom_voronoiBeaches.insert(lArc, newArc);\n if (!lArc && !rArc) return;\n if (lArc === rArc) {\n d3_geom_voronoiDetachCircle(lArc);\n rArc = d3_geom_voronoiCreateBeach(lArc.site);\n d3_geom_voronoiBeaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);\n d3_geom_voronoiAttachCircle(lArc);\n d3_geom_voronoiAttachCircle(rArc);\n return;\n }\n if (!rArc) {\n newArc.edge = d3_geom_voronoiCreateEdge(lArc.site, newArc.site);\n return;\n }\n d3_geom_voronoiDetachCircle(lArc);\n d3_geom_voronoiDetachCircle(rArc);\n var lSite = lArc.site, ax = lSite.x, ay = lSite.y, bx = site.x - ax, by = site.y - ay, rSite = rArc.site, cx = rSite.x - ax, cy = rSite.y - ay, d = 2 * (bx * cy - by * cx), hb = bx * bx + by * by, hc = cx * cx + cy * cy, vertex = {\n x: (cy * hb - by * hc) / d + ax,\n y: (bx * hc - cx * hb) / d + ay\n };\n d3_geom_voronoiSetEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = d3_geom_voronoiCreateEdge(lSite, site, null, vertex);\n rArc.edge = d3_geom_voronoiCreateEdge(site, rSite, null, vertex);\n d3_geom_voronoiAttachCircle(lArc);\n d3_geom_voronoiAttachCircle(rArc);\n }\n function d3_geom_voronoiLeftBreakPoint(arc, directrix) {\n var site = arc.site, rfocx = site.x, rfocy = site.y, pby2 = rfocy - directrix;\n if (!pby2) return rfocx;\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n site = lArc.site;\n var lfocx = site.x, lfocy = site.y, plby2 = lfocy - directrix;\n if (!plby2) return lfocx;\n var hl = lfocx - rfocx, aby2 = 1 / pby2 - 1 / plby2, b = hl / plby2;\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n return (rfocx + lfocx) / 2;\n }\n function d3_geom_voronoiRightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return d3_geom_voronoiLeftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site.y === directrix ? site.x : Infinity;\n }\n function d3_geom_voronoiCell(site) {\n this.site = site;\n this.edges = [];\n }\n d3_geom_voronoiCell.prototype.prepare = function() {\n var halfEdges = this.edges, iHalfEdge = halfEdges.length, edge;\n while (iHalfEdge--) {\n edge = halfEdges[iHalfEdge].edge;\n if (!edge.b || !edge.a) halfEdges.splice(iHalfEdge, 1);\n }\n halfEdges.sort(d3_geom_voronoiHalfEdgeOrder);\n return halfEdges.length;\n };\n function d3_geom_voronoiCloseCells(extent) {\n var x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], x2, y2, x3, y3, cells = d3_geom_voronoiCells, iCell = cells.length, cell, iHalfEdge, halfEdges, nHalfEdges, start, end;\n while (iCell--) {\n cell = cells[iCell];\n if (!cell || !cell.prepare()) continue;\n halfEdges = cell.edges;\n nHalfEdges = halfEdges.length;\n iHalfEdge = 0;\n while (iHalfEdge < nHalfEdges) {\n end = halfEdges[iHalfEdge].end(), x3 = end.x, y3 = end.y;\n start = halfEdges[++iHalfEdge % nHalfEdges].start(), x2 = start.x, y2 = start.y;\n if (abs(x3 - x2) > ε || abs(y3 - y2) > ε) {\n halfEdges.splice(iHalfEdge, 0, new d3_geom_voronoiHalfEdge(d3_geom_voronoiCreateBorderEdge(cell.site, end, abs(x3 - x0) < ε && y1 - y3 > ε ? {\n x: x0,\n y: abs(x2 - x0) < ε ? y2 : y1\n } : abs(y3 - y1) < ε && x1 - x3 > ε ? {\n x: abs(y2 - y1) < ε ? x2 : x1,\n y: y1\n } : abs(x3 - x1) < ε && y3 - y0 > ε ? {\n x: x1,\n y: abs(x2 - x1) < ε ? y2 : y0\n } : abs(y3 - y0) < ε && x3 - x0 > ε ? {\n x: abs(y2 - y0) < ε ? x2 : x0,\n y: y0\n } : null), cell.site, null));\n ++nHalfEdges;\n }\n }\n }\n }\n function d3_geom_voronoiHalfEdgeOrder(a, b) {\n return b.angle - a.angle;\n }\n function d3_geom_voronoiCircle() {\n d3_geom_voronoiRedBlackNode(this);\n this.x = this.y = this.arc = this.site = this.cy = null;\n }\n function d3_geom_voronoiAttachCircle(arc) {\n var lArc = arc.P, rArc = arc.N;\n if (!lArc || !rArc) return;\n var lSite = lArc.site, cSite = arc.site, rSite = rArc.site;\n if (lSite === rSite) return;\n var bx = cSite.x, by = cSite.y, ax = lSite.x - bx, ay = lSite.y - by, cx = rSite.x - bx, cy = rSite.y - by;\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -ε2) return;\n var ha = ax * ax + ay * ay, hc = cx * cx + cy * cy, x = (cy * ha - ay * hc) / d, y = (ax * hc - cx * ha) / d, cy = y + by;\n var circle = d3_geom_voronoiCirclePool.pop() || new d3_geom_voronoiCircle();\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = cy + Math.sqrt(x * x + y * y);\n circle.cy = cy;\n arc.circle = circle;\n var before = null, node = d3_geom_voronoiCircles._;\n while (node) {\n if (circle.y < node.y || circle.y === node.y && circle.x <= node.x) {\n if (node.L) node = node.L; else {\n before = node.P;\n break;\n }\n } else {\n if (node.R) node = node.R; else {\n before = node;\n break;\n }\n }\n }\n d3_geom_voronoiCircles.insert(before, circle);\n if (!before) d3_geom_voronoiFirstCircle = circle;\n }\n function d3_geom_voronoiDetachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) d3_geom_voronoiFirstCircle = circle.N;\n d3_geom_voronoiCircles.remove(circle);\n d3_geom_voronoiCirclePool.push(circle);\n d3_geom_voronoiRedBlackNode(circle);\n arc.circle = null;\n }\n }\n function d3_geom_voronoiClipEdges(extent) {\n var edges = d3_geom_voronoiEdges, clip = d3_geom_clipLine(extent[0][0], extent[0][1], extent[1][0], extent[1][1]), i = edges.length, e;\n while (i--) {\n e = edges[i];\n if (!d3_geom_voronoiConnectEdge(e, extent) || !clip(e) || abs(e.a.x - e.b.x) < ε && abs(e.a.y - e.b.y) < ε) {\n e.a = e.b = null;\n edges.splice(i, 1);\n }\n }\n }\n function d3_geom_voronoiConnectEdge(edge, extent) {\n var vb = edge.b;\n if (vb) return true;\n var va = edge.a, x0 = extent[0][0], x1 = extent[1][0], y0 = extent[0][1], y1 = extent[1][1], lSite = edge.l, rSite = edge.r, lx = lSite.x, ly = lSite.y, rx = rSite.x, ry = rSite.y, fx = (lx + rx) / 2, fy = (ly + ry) / 2, fm, fb;\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!va) va = {\n x: fx,\n y: y0\n }; else if (va.y >= y1) return;\n vb = {\n x: fx,\n y: y1\n };\n } else {\n if (!va) va = {\n x: fx,\n y: y1\n }; else if (va.y < y0) return;\n vb = {\n x: fx,\n y: y0\n };\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!va) va = {\n x: (y0 - fb) / fm,\n y: y0\n }; else if (va.y >= y1) return;\n vb = {\n x: (y1 - fb) / fm,\n y: y1\n };\n } else {\n if (!va) va = {\n x: (y1 - fb) / fm,\n y: y1\n }; else if (va.y < y0) return;\n vb = {\n x: (y0 - fb) / fm,\n y: y0\n };\n }\n } else {\n if (ly < ry) {\n if (!va) va = {\n x: x0,\n y: fm * x0 + fb\n }; else if (va.x >= x1) return;\n vb = {\n x: x1,\n y: fm * x1 + fb\n };\n } else {\n if (!va) va = {\n x: x1,\n y: fm * x1 + fb\n }; else if (va.x < x0) return;\n vb = {\n x: x0,\n y: fm * x0 + fb\n };\n }\n }\n }\n edge.a = va;\n edge.b = vb;\n return true;\n }\n function d3_geom_voronoiEdge(lSite, rSite) {\n this.l = lSite;\n this.r = rSite;\n this.a = this.b = null;\n }\n function d3_geom_voronoiCreateEdge(lSite, rSite, va, vb) {\n var edge = new d3_geom_voronoiEdge(lSite, rSite);\n d3_geom_voronoiEdges.push(edge);\n if (va) d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, va);\n if (vb) d3_geom_voronoiSetEdgeEnd(edge, rSite, lSite, vb);\n d3_geom_voronoiCells[lSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, lSite, rSite));\n d3_geom_voronoiCells[rSite.i].edges.push(new d3_geom_voronoiHalfEdge(edge, rSite, lSite));\n return edge;\n }\n function d3_geom_voronoiCreateBorderEdge(lSite, va, vb) {\n var edge = new d3_geom_voronoiEdge(lSite, null);\n edge.a = va;\n edge.b = vb;\n d3_geom_voronoiEdges.push(edge);\n return edge;\n }\n function d3_geom_voronoiSetEdgeEnd(edge, lSite, rSite, vertex) {\n if (!edge.a && !edge.b) {\n edge.a = vertex;\n edge.l = lSite;\n edge.r = rSite;\n } else if (edge.l === rSite) {\n edge.b = vertex;\n } else {\n edge.a = vertex;\n }\n }\n function d3_geom_voronoiHalfEdge(edge, lSite, rSite) {\n var va = edge.a, vb = edge.b;\n this.edge = edge;\n this.site = lSite;\n this.angle = rSite ? Math.atan2(rSite.y - lSite.y, rSite.x - lSite.x) : edge.l === lSite ? Math.atan2(vb.x - va.x, va.y - vb.y) : Math.atan2(va.x - vb.x, vb.y - va.y);\n }\n d3_geom_voronoiHalfEdge.prototype = {\n start: function() {\n return this.edge.l === this.site ? this.edge.a : this.edge.b;\n },\n end: function() {\n return this.edge.l === this.site ? this.edge.b : this.edge.a;\n }\n };\n function d3_geom_voronoiRedBlackTree() {\n this._ = null;\n }\n function d3_geom_voronoiRedBlackNode(node) {\n node.U = node.C = node.L = node.R = node.P = node.N = null;\n }\n d3_geom_voronoiRedBlackTree.prototype = {\n insert: function(after, node) {\n var parent, grandpa, uncle;\n if (after) {\n node.P = after;\n node.N = after.N;\n if (after.N) after.N.P = node;\n after.N = node;\n if (after.R) {\n after = after.R;\n while (after.L) after = after.L;\n after.L = node;\n } else {\n after.R = node;\n }\n parent = after;\n } else if (this._) {\n after = d3_geom_voronoiRedBlackFirst(this._);\n node.P = null;\n node.N = after;\n after.P = after.L = node;\n parent = after;\n } else {\n node.P = node.N = null;\n this._ = node;\n parent = null;\n }\n node.L = node.R = null;\n node.U = parent;\n node.C = true;\n after = node;\n while (parent && parent.C) {\n grandpa = parent.U;\n if (parent === grandpa.L) {\n uncle = grandpa.R;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.R) {\n d3_geom_voronoiRedBlackRotateLeft(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n d3_geom_voronoiRedBlackRotateRight(this, grandpa);\n }\n } else {\n uncle = grandpa.L;\n if (uncle && uncle.C) {\n parent.C = uncle.C = false;\n grandpa.C = true;\n after = grandpa;\n } else {\n if (after === parent.L) {\n d3_geom_voronoiRedBlackRotateRight(this, parent);\n after = parent;\n parent = after.U;\n }\n parent.C = false;\n grandpa.C = true;\n d3_geom_voronoiRedBlackRotateLeft(this, grandpa);\n }\n }\n parent = after.U;\n }\n this._.C = false;\n },\n remove: function(node) {\n if (node.N) node.N.P = node.P;\n if (node.P) node.P.N = node.N;\n node.N = node.P = null;\n var parent = node.U, sibling, left = node.L, right = node.R, next, red;\n if (!left) next = right; else if (!right) next = left; else next = d3_geom_voronoiRedBlackFirst(right);\n if (parent) {\n if (parent.L === node) parent.L = next; else parent.R = next;\n } else {\n this._ = next;\n }\n if (left && right) {\n red = next.C;\n next.C = node.C;\n next.L = left;\n left.U = next;\n if (next !== right) {\n parent = next.U;\n next.U = node.U;\n node = next.R;\n parent.L = node;\n next.R = right;\n right.U = next;\n } else {\n next.U = parent;\n parent = next;\n node = next.R;\n }\n } else {\n red = node.C;\n node = next;\n }\n if (node) node.U = parent;\n if (red) return;\n if (node && node.C) {\n node.C = false;\n return;\n }\n do {\n if (node === this._) break;\n if (node === parent.L) {\n sibling = parent.R;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n d3_geom_voronoiRedBlackRotateLeft(this, parent);\n sibling = parent.R;\n }\n if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {\n if (!sibling.R || !sibling.R.C) {\n sibling.L.C = false;\n sibling.C = true;\n d3_geom_voronoiRedBlackRotateRight(this, sibling);\n sibling = parent.R;\n }\n sibling.C = parent.C;\n parent.C = sibling.R.C = false;\n d3_geom_voronoiRedBlackRotateLeft(this, parent);\n node = this._;\n break;\n }\n } else {\n sibling = parent.L;\n if (sibling.C) {\n sibling.C = false;\n parent.C = true;\n d3_geom_voronoiRedBlackRotateRight(this, parent);\n sibling = parent.L;\n }\n if (sibling.L && sibling.L.C || sibling.R && sibling.R.C) {\n if (!sibling.L || !sibling.L.C) {\n sibling.R.C = false;\n sibling.C = true;\n d3_geom_voronoiRedBlackRotateLeft(this, sibling);\n sibling = parent.L;\n }\n sibling.C = parent.C;\n parent.C = sibling.L.C = false;\n d3_geom_voronoiRedBlackRotateRight(this, parent);\n node = this._;\n break;\n }\n }\n sibling.C = true;\n node = parent;\n parent = parent.U;\n } while (!node.C);\n if (node) node.C = false;\n }\n };\n function d3_geom_voronoiRedBlackRotateLeft(tree, node) {\n var p = node, q = node.R, parent = p.U;\n if (parent) {\n if (parent.L === p) parent.L = q; else parent.R = q;\n } else {\n tree._ = q;\n }\n q.U = parent;\n p.U = q;\n p.R = q.L;\n if (p.R) p.R.U = p;\n q.L = p;\n }\n function d3_geom_voronoiRedBlackRotateRight(tree, node) {\n var p = node, q = node.L, parent = p.U;\n if (parent) {\n if (parent.L === p) parent.L = q; else parent.R = q;\n } else {\n tree._ = q;\n }\n q.U = parent;\n p.U = q;\n p.L = q.R;\n if (p.L) p.L.U = p;\n q.R = p;\n }\n function d3_geom_voronoiRedBlackFirst(node) {\n while (node.L) node = node.L;\n return node;\n }\n function d3_geom_voronoi(sites, bbox) {\n var site = sites.sort(d3_geom_voronoiVertexOrder).pop(), x0, y0, circle;\n d3_geom_voronoiEdges = [];\n d3_geom_voronoiCells = new Array(sites.length);\n d3_geom_voronoiBeaches = new d3_geom_voronoiRedBlackTree();\n d3_geom_voronoiCircles = new d3_geom_voronoiRedBlackTree();\n while (true) {\n circle = d3_geom_voronoiFirstCircle;\n if (site && (!circle || site.y < circle.y || site.y === circle.y && site.x < circle.x)) {\n if (site.x !== x0 || site.y !== y0) {\n d3_geom_voronoiCells[site.i] = new d3_geom_voronoiCell(site);\n d3_geom_voronoiAddBeach(site);\n x0 = site.x, y0 = site.y;\n }\n site = sites.pop();\n } else if (circle) {\n d3_geom_voronoiRemoveBeach(circle.arc);\n } else {\n break;\n }\n }\n if (bbox) d3_geom_voronoiClipEdges(bbox), d3_geom_voronoiCloseCells(bbox);\n var diagram = {\n cells: d3_geom_voronoiCells,\n edges: d3_geom_voronoiEdges\n };\n d3_geom_voronoiBeaches = d3_geom_voronoiCircles = d3_geom_voronoiEdges = d3_geom_voronoiCells = null;\n return diagram;\n }\n function d3_geom_voronoiVertexOrder(a, b) {\n return b.y - a.y || b.x - a.x;\n }\n d3.geom.voronoi = function(points) {\n var x = d3_geom_pointX, y = d3_geom_pointY, fx = x, fy = y, clipExtent = d3_geom_voronoiClipExtent;\n if (points) return voronoi(points);\n function voronoi(data) {\n var polygons = new Array(data.length), x0 = clipExtent[0][0], y0 = clipExtent[0][1], x1 = clipExtent[1][0], y1 = clipExtent[1][1];\n d3_geom_voronoi(sites(data), clipExtent).cells.forEach(function(cell, i) {\n var edges = cell.edges, site = cell.site, polygon = polygons[i] = edges.length ? edges.map(function(e) {\n var s = e.start();\n return [ s.x, s.y ];\n }) : site.x >= x0 && site.x <= x1 && site.y >= y0 && site.y <= y1 ? [ [ x0, y1 ], [ x1, y1 ], [ x1, y0 ], [ x0, y0 ] ] : [];\n polygon.point = data[i];\n });\n return polygons;\n }\n function sites(data) {\n return data.map(function(d, i) {\n return {\n x: Math.round(fx(d, i) / ε) * ε,\n y: Math.round(fy(d, i) / ε) * ε,\n i: i\n };\n });\n }\n voronoi.links = function(data) {\n return d3_geom_voronoi(sites(data)).edges.filter(function(edge) {\n return edge.l && edge.r;\n }).map(function(edge) {\n return {\n source: data[edge.l.i],\n target: data[edge.r.i]\n };\n });\n };\n voronoi.triangles = function(data) {\n var triangles = [];\n d3_geom_voronoi(sites(data)).cells.forEach(function(cell, i) {\n var site = cell.site, edges = cell.edges.sort(d3_geom_voronoiHalfEdgeOrder), j = -1, m = edges.length, e0, s0, e1 = edges[m - 1].edge, s1 = e1.l === site ? e1.r : e1.l;\n while (++j < m) {\n e0 = e1;\n s0 = s1;\n e1 = edges[j].edge;\n s1 = e1.l === site ? e1.r : e1.l;\n if (i < s0.i && i < s1.i && d3_geom_voronoiTriangleArea(site, s0, s1) < 0) {\n triangles.push([ data[i], data[s0.i], data[s1.i] ]);\n }\n }\n });\n return triangles;\n };\n voronoi.x = function(_) {\n return arguments.length ? (fx = d3_functor(x = _), voronoi) : x;\n };\n voronoi.y = function(_) {\n return arguments.length ? (fy = d3_functor(y = _), voronoi) : y;\n };\n voronoi.clipExtent = function(_) {\n if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent;\n clipExtent = _ == null ? d3_geom_voronoiClipExtent : _;\n return voronoi;\n };\n voronoi.size = function(_) {\n if (!arguments.length) return clipExtent === d3_geom_voronoiClipExtent ? null : clipExtent && clipExtent[1];\n return voronoi.clipExtent(_ && [ [ 0, 0 ], _ ]);\n };\n return voronoi;\n };\n var d3_geom_voronoiClipExtent = [ [ -1e6, -1e6 ], [ 1e6, 1e6 ] ];\n function d3_geom_voronoiTriangleArea(a, b, c) {\n return (a.x - c.x) * (b.y - a.y) - (a.x - b.x) * (c.y - a.y);\n }\n d3.geom.delaunay = function(vertices) {\n return d3.geom.voronoi().triangles(vertices);\n };\n d3.geom.quadtree = function(points, x1, y1, x2, y2) {\n var x = d3_geom_pointX, y = d3_geom_pointY, compat;\n if (compat = arguments.length) {\n x = d3_geom_quadtreeCompatX;\n y = d3_geom_quadtreeCompatY;\n if (compat === 3) {\n y2 = y1;\n x2 = x1;\n y1 = x1 = 0;\n }\n return quadtree(points);\n }\n function quadtree(data) {\n var d, fx = d3_functor(x), fy = d3_functor(y), xs, ys, i, n, x1_, y1_, x2_, y2_;\n if (x1 != null) {\n x1_ = x1, y1_ = y1, x2_ = x2, y2_ = y2;\n } else {\n x2_ = y2_ = -(x1_ = y1_ = Infinity);\n xs = [], ys = [];\n n = data.length;\n if (compat) for (i = 0; i < n; ++i) {\n d = data[i];\n if (d.x < x1_) x1_ = d.x;\n if (d.y < y1_) y1_ = d.y;\n if (d.x > x2_) x2_ = d.x;\n if (d.y > y2_) y2_ = d.y;\n xs.push(d.x);\n ys.push(d.y);\n } else for (i = 0; i < n; ++i) {\n var x_ = +fx(d = data[i], i), y_ = +fy(d, i);\n if (x_ < x1_) x1_ = x_;\n if (y_ < y1_) y1_ = y_;\n if (x_ > x2_) x2_ = x_;\n if (y_ > y2_) y2_ = y_;\n xs.push(x_);\n ys.push(y_);\n }\n }\n var dx = x2_ - x1_, dy = y2_ - y1_;\n if (dx > dy) y2_ = y1_ + dx; else x2_ = x1_ + dy;\n function insert(n, d, x, y, x1, y1, x2, y2) {\n if (isNaN(x) || isNaN(y)) return;\n if (n.leaf) {\n var nx = n.x, ny = n.y;\n if (nx != null) {\n if (abs(nx - x) + abs(ny - y) < .01) {\n insertChild(n, d, x, y, x1, y1, x2, y2);\n } else {\n var nPoint = n.point;\n n.x = n.y = n.point = null;\n insertChild(n, nPoint, nx, ny, x1, y1, x2, y2);\n insertChild(n, d, x, y, x1, y1, x2, y2);\n }\n } else {\n n.x = x, n.y = y, n.point = d;\n }\n } else {\n insertChild(n, d, x, y, x1, y1, x2, y2);\n }\n }\n function insertChild(n, d, x, y, x1, y1, x2, y2) {\n var xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym, i = below << 1 | right;\n n.leaf = false;\n n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());\n if (right) x1 = xm; else x2 = xm;\n if (below) y1 = ym; else y2 = ym;\n insert(n, d, x, y, x1, y1, x2, y2);\n }\n var root = d3_geom_quadtreeNode();\n root.add = function(d) {\n insert(root, d, +fx(d, ++i), +fy(d, i), x1_, y1_, x2_, y2_);\n };\n root.visit = function(f) {\n d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_);\n };\n root.find = function(point) {\n return d3_geom_quadtreeFind(root, point[0], point[1], x1_, y1_, x2_, y2_);\n };\n i = -1;\n if (x1 == null) {\n while (++i < n) {\n insert(root, data[i], xs[i], ys[i], x1_, y1_, x2_, y2_);\n }\n --i;\n } else data.forEach(root.add);\n xs = ys = data = d = null;\n return root;\n }\n quadtree.x = function(_) {\n return arguments.length ? (x = _, quadtree) : x;\n };\n quadtree.y = function(_) {\n return arguments.length ? (y = _, quadtree) : y;\n };\n quadtree.extent = function(_) {\n if (!arguments.length) return x1 == null ? null : [ [ x1, y1 ], [ x2, y2 ] ];\n if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = +_[0][0], y1 = +_[0][1], x2 = +_[1][0], \n y2 = +_[1][1];\n return quadtree;\n };\n quadtree.size = function(_) {\n if (!arguments.length) return x1 == null ? null : [ x2 - x1, y2 - y1 ];\n if (_ == null) x1 = y1 = x2 = y2 = null; else x1 = y1 = 0, x2 = +_[0], y2 = +_[1];\n return quadtree;\n };\n return quadtree;\n };\n function d3_geom_quadtreeCompatX(d) {\n return d.x;\n }\n function d3_geom_quadtreeCompatY(d) {\n return d.y;\n }\n function d3_geom_quadtreeNode() {\n return {\n leaf: true,\n nodes: [],\n point: null,\n x: null,\n y: null\n };\n }\n function d3_geom_quadtreeVisit(f, node, x1, y1, x2, y2) {\n if (!f(node, x1, y1, x2, y2)) {\n var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, children = node.nodes;\n if (children[0]) d3_geom_quadtreeVisit(f, children[0], x1, y1, sx, sy);\n if (children[1]) d3_geom_quadtreeVisit(f, children[1], sx, y1, x2, sy);\n if (children[2]) d3_geom_quadtreeVisit(f, children[2], x1, sy, sx, y2);\n if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2);\n }\n }\n function d3_geom_quadtreeFind(root, x, y, x0, y0, x3, y3) {\n var minDistance2 = Infinity, closestPoint;\n (function find(node, x1, y1, x2, y2) {\n if (x1 > x3 || y1 > y3 || x2 < x0 || y2 < y0) return;\n if (point = node.point) {\n var point, dx = x - node.x, dy = y - node.y, distance2 = dx * dx + dy * dy;\n if (distance2 < minDistance2) {\n var distance = Math.sqrt(minDistance2 = distance2);\n x0 = x - distance, y0 = y - distance;\n x3 = x + distance, y3 = y + distance;\n closestPoint = point;\n }\n }\n var children = node.nodes, xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym;\n for (var i = below << 1 | right, j = i + 4; i < j; ++i) {\n if (node = children[i & 3]) switch (i & 3) {\n case 0:\n find(node, x1, y1, xm, ym);\n break;\n\n case 1:\n find(node, xm, y1, x2, ym);\n break;\n\n case 2:\n find(node, x1, ym, xm, y2);\n break;\n\n case 3:\n find(node, xm, ym, x2, y2);\n break;\n }\n }\n })(root, x0, y0, x3, y3);\n return closestPoint;\n }\n d3.interpolateRgb = d3_interpolateRgb;\n function d3_interpolateRgb(a, b) {\n a = d3.rgb(a);\n b = d3.rgb(b);\n var ar = a.r, ag = a.g, ab = a.b, br = b.r - ar, bg = b.g - ag, bb = b.b - ab;\n return function(t) {\n return \"#\" + d3_rgb_hex(Math.round(ar + br * t)) + d3_rgb_hex(Math.round(ag + bg * t)) + d3_rgb_hex(Math.round(ab + bb * t));\n };\n }\n d3.interpolateObject = d3_interpolateObject;\n function d3_interpolateObject(a, b) {\n var i = {}, c = {}, k;\n for (k in a) {\n if (k in b) {\n i[k] = d3_interpolate(a[k], b[k]);\n } else {\n c[k] = a[k];\n }\n }\n for (k in b) {\n if (!(k in a)) {\n c[k] = b[k];\n }\n }\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n }\n d3.interpolateNumber = d3_interpolateNumber;\n function d3_interpolateNumber(a, b) {\n a = +a, b = +b;\n return function(t) {\n return a * (1 - t) + b * t;\n };\n }\n d3.interpolateString = d3_interpolateString;\n function d3_interpolateString(a, b) {\n var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = [];\n a = a + \"\", b = b + \"\";\n while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) {\n if ((bs = bm.index) > bi) {\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) {\n if (s[i]) s[i] += bm; else s[++i] = bm;\n } else {\n s[++i] = null;\n q.push({\n i: i,\n x: d3_interpolateNumber(am, bm)\n });\n }\n bi = d3_interpolate_numberB.lastIndex;\n }\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; else s[++i] = bs;\n }\n return s.length < 2 ? q[0] ? (b = q[0].x, function(t) {\n return b(t) + \"\";\n }) : function() {\n return b;\n } : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n }\n var d3_interpolate_numberA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, \"g\");\n d3.interpolate = d3_interpolate;\n function d3_interpolate(a, b) {\n var i = d3.interpolators.length, f;\n while (--i >= 0 && !(f = d3.interpolators[i](a, b))) ;\n return f;\n }\n d3.interpolators = [ function(a, b) {\n var t = typeof b;\n return (t === \"string\" ? d3_rgb_names.has(b.toLowerCase()) || /^(#|rgb\\(|hsl\\()/i.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_color ? d3_interpolateRgb : Array.isArray(b) ? d3_interpolateArray : t === \"object\" && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b);\n } ];\n d3.interpolateArray = d3_interpolateArray;\n function d3_interpolateArray(a, b) {\n var x = [], c = [], na = a.length, nb = b.length, n0 = Math.min(a.length, b.length), i;\n for (i = 0; i < n0; ++i) x.push(d3_interpolate(a[i], b[i]));\n for (;i < na; ++i) c[i] = a[i];\n for (;i < nb; ++i) c[i] = b[i];\n return function(t) {\n for (i = 0; i < n0; ++i) c[i] = x[i](t);\n return c;\n };\n }\n var d3_ease_default = function() {\n return d3_identity;\n };\n var d3_ease = d3.map({\n linear: d3_ease_default,\n poly: d3_ease_poly,\n quad: function() {\n return d3_ease_quad;\n },\n cubic: function() {\n return d3_ease_cubic;\n },\n sin: function() {\n return d3_ease_sin;\n },\n exp: function() {\n return d3_ease_exp;\n },\n circle: function() {\n return d3_ease_circle;\n },\n elastic: d3_ease_elastic,\n back: d3_ease_back,\n bounce: function() {\n return d3_ease_bounce;\n }\n });\n var d3_ease_mode = d3.map({\n \"in\": d3_identity,\n out: d3_ease_reverse,\n \"in-out\": d3_ease_reflect,\n \"out-in\": function(f) {\n return d3_ease_reflect(d3_ease_reverse(f));\n }\n });\n d3.ease = function(name) {\n var i = name.indexOf(\"-\"), t = i >= 0 ? name.slice(0, i) : name, m = i >= 0 ? name.slice(i + 1) : \"in\";\n t = d3_ease.get(t) || d3_ease_default;\n m = d3_ease_mode.get(m) || d3_identity;\n return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1))));\n };\n function d3_ease_clamp(f) {\n return function(t) {\n return t <= 0 ? 0 : t >= 1 ? 1 : f(t);\n };\n }\n function d3_ease_reverse(f) {\n return function(t) {\n return 1 - f(1 - t);\n };\n }\n function d3_ease_reflect(f) {\n return function(t) {\n return .5 * (t < .5 ? f(2 * t) : 2 - f(2 - 2 * t));\n };\n }\n function d3_ease_quad(t) {\n return t * t;\n }\n function d3_ease_cubic(t) {\n return t * t * t;\n }\n function d3_ease_cubicInOut(t) {\n if (t <= 0) return 0;\n if (t >= 1) return 1;\n var t2 = t * t, t3 = t2 * t;\n return 4 * (t < .5 ? t3 : 3 * (t - t2) + t3 - .75);\n }\n function d3_ease_poly(e) {\n return function(t) {\n return Math.pow(t, e);\n };\n }\n function d3_ease_sin(t) {\n return 1 - Math.cos(t * halfπ);\n }\n function d3_ease_exp(t) {\n return Math.pow(2, 10 * (t - 1));\n }\n function d3_ease_circle(t) {\n return 1 - Math.sqrt(1 - t * t);\n }\n function d3_ease_elastic(a, p) {\n var s;\n if (arguments.length < 2) p = .45;\n if (arguments.length) s = p / τ * Math.asin(1 / a); else a = 1, s = p / 4;\n return function(t) {\n return 1 + a * Math.pow(2, -10 * t) * Math.sin((t - s) * τ / p);\n };\n }\n function d3_ease_back(s) {\n if (!s) s = 1.70158;\n return function(t) {\n return t * t * ((s + 1) * t - s);\n };\n }\n function d3_ease_bounce(t) {\n return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;\n }\n d3.interpolateHcl = d3_interpolateHcl;\n function d3_interpolateHcl(a, b) {\n a = d3.hcl(a);\n b = d3.hcl(b);\n var ah = a.h, ac = a.c, al = a.l, bh = b.h - ah, bc = b.c - ac, bl = b.l - al;\n if (isNaN(bc)) bc = 0, ac = isNaN(ac) ? b.c : ac;\n if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;\n return function(t) {\n return d3_hcl_lab(ah + bh * t, ac + bc * t, al + bl * t) + \"\";\n };\n }\n d3.interpolateHsl = d3_interpolateHsl;\n function d3_interpolateHsl(a, b) {\n a = d3.hsl(a);\n b = d3.hsl(b);\n var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al;\n if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as;\n if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah; else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;\n return function(t) {\n return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + \"\";\n };\n }\n // ONTO: The -Long version was added in d3 v4 (this is v3) but we hacked our own implementation here\n d3.interpolateHslLong = d3_interpolateHslLong;\n function d3_interpolateHslLong(a, b) {\n a = d3.hsl(a);\n b = d3.hsl(b);\n var ah = a.h, as = a.s, al = a.l, bh = b.h - ah, bs = b.s - as, bl = b.l - al;\n if (isNaN(bs)) bs = 0, as = isNaN(as) ? b.s : as;\n if (isNaN(bh)) bh = 0, ah = isNaN(ah) ? b.h : ah;// else if (bh > 180) bh -= 360; else if (bh < -180) bh += 360;\n return function(t) {\n return d3_hsl_rgb(ah + bh * t, as + bs * t, al + bl * t) + \"\";\n };\n }\n d3.interpolateLab = d3_interpolateLab;\n function d3_interpolateLab(a, b) {\n a = d3.lab(a);\n b = d3.lab(b);\n var al = a.l, aa = a.a, ab = a.b, bl = b.l - al, ba = b.a - aa, bb = b.b - ab;\n return function(t) {\n return d3_lab_rgb(al + bl * t, aa + ba * t, ab + bb * t) + \"\";\n };\n }\n d3.interpolateRound = d3_interpolateRound;\n function d3_interpolateRound(a, b) {\n b -= a;\n return function(t) {\n return Math.round(a + b * t);\n };\n }\n d3.transform = function(string) {\n var g = d3_document.createElementNS(d3.ns.prefix.svg, \"g\");\n return (d3.transform = function(string) {\n if (string != null) {\n g.setAttribute(\"transform\", string);\n var t = g.transform.baseVal.consolidate();\n }\n return new d3_transform(t ? t.matrix : d3_transformIdentity);\n })(string);\n };\n function d3_transform(m) {\n var r0 = [ m.a, m.b ], r1 = [ m.c, m.d ], kx = d3_transformNormalize(r0), kz = d3_transformDot(r0, r1), ky = d3_transformNormalize(d3_transformCombine(r1, r0, -kz)) || 0;\n if (r0[0] * r1[1] < r1[0] * r0[1]) {\n r0[0] *= -1;\n r0[1] *= -1;\n kx *= -1;\n kz *= -1;\n }\n this.rotate = (kx ? Math.atan2(r0[1], r0[0]) : Math.atan2(-r1[0], r1[1])) * d3_degrees;\n this.translate = [ m.e, m.f ];\n this.scale = [ kx, ky ];\n this.skew = ky ? Math.atan2(kz, ky) * d3_degrees : 0;\n }\n d3_transform.prototype.toString = function() {\n return \"translate(\" + this.translate + \")rotate(\" + this.rotate + \")skewX(\" + this.skew + \")scale(\" + this.scale + \")\";\n };\n function d3_transformDot(a, b) {\n return a[0] * b[0] + a[1] * b[1];\n }\n function d3_transformNormalize(a) {\n var k = Math.sqrt(d3_transformDot(a, a));\n if (k) {\n a[0] /= k;\n a[1] /= k;\n }\n return k;\n }\n function d3_transformCombine(a, b, k) {\n a[0] += k * b[0];\n a[1] += k * b[1];\n return a;\n }\n var d3_transformIdentity = {\n a: 1,\n b: 0,\n c: 0,\n d: 1,\n e: 0,\n f: 0\n };\n d3.interpolateTransform = d3_interpolateTransform;\n function d3_interpolateTransformPop(s) {\n return s.length ? s.pop() + \",\" : \"\";\n }\n function d3_interpolateTranslate(ta, tb, s, q) {\n if (ta[0] !== tb[0] || ta[1] !== tb[1]) {\n var i = s.push(\"translate(\", null, \",\", null, \")\");\n q.push({\n i: i - 4,\n x: d3_interpolateNumber(ta[0], tb[0])\n }, {\n i: i - 2,\n x: d3_interpolateNumber(ta[1], tb[1])\n });\n } else if (tb[0] || tb[1]) {\n s.push(\"translate(\" + tb + \")\");\n }\n }\n function d3_interpolateRotate(ra, rb, s, q) {\n if (ra !== rb) {\n if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360;\n q.push({\n i: s.push(d3_interpolateTransformPop(s) + \"rotate(\", null, \")\") - 2,\n x: d3_interpolateNumber(ra, rb)\n });\n } else if (rb) {\n s.push(d3_interpolateTransformPop(s) + \"rotate(\" + rb + \")\");\n }\n }\n function d3_interpolateSkew(wa, wb, s, q) {\n if (wa !== wb) {\n q.push({\n i: s.push(d3_interpolateTransformPop(s) + \"skewX(\", null, \")\") - 2,\n x: d3_interpolateNumber(wa, wb)\n });\n } else if (wb) {\n s.push(d3_interpolateTransformPop(s) + \"skewX(\" + wb + \")\");\n }\n }\n function d3_interpolateScale(ka, kb, s, q) {\n if (ka[0] !== kb[0] || ka[1] !== kb[1]) {\n var i = s.push(d3_interpolateTransformPop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({\n i: i - 4,\n x: d3_interpolateNumber(ka[0], kb[0])\n }, {\n i: i - 2,\n x: d3_interpolateNumber(ka[1], kb[1])\n });\n } else if (kb[0] !== 1 || kb[1] !== 1) {\n s.push(d3_interpolateTransformPop(s) + \"scale(\" + kb + \")\");\n }\n }\n function d3_interpolateTransform(a, b) {\n var s = [], q = [];\n a = d3.transform(a), b = d3.transform(b);\n d3_interpolateTranslate(a.translate, b.translate, s, q);\n d3_interpolateRotate(a.rotate, b.rotate, s, q);\n d3_interpolateSkew(a.skew, b.skew, s, q);\n d3_interpolateScale(a.scale, b.scale, s, q);\n a = b = null;\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n }\n function d3_uninterpolateNumber(a, b) {\n b = (b -= a = +a) || 1 / b;\n return function(x) {\n return (x - a) / b;\n };\n }\n function d3_uninterpolateClamp(a, b) {\n b = (b -= a = +a) || 1 / b;\n return function(x) {\n return Math.max(0, Math.min(1, (x - a) / b));\n };\n }\n d3.layout = {};\n d3.layout.bundle = function() {\n return function(links) {\n var paths = [], i = -1, n = links.length;\n while (++i < n) paths.push(d3_layout_bundlePath(links[i]));\n return paths;\n };\n };\n function d3_layout_bundlePath(link) {\n var start = link.source, end = link.target, lca = d3_layout_bundleLeastCommonAncestor(start, end), points = [ start ];\n while (start !== lca) {\n start = start.parent;\n points.push(start);\n }\n var k = points.length;\n while (end !== lca) {\n points.splice(k, 0, end);\n end = end.parent;\n }\n return points;\n }\n function d3_layout_bundleAncestors(node) {\n var ancestors = [], parent = node.parent;\n while (parent != null) {\n ancestors.push(node);\n node = parent;\n parent = parent.parent;\n }\n ancestors.push(node);\n return ancestors;\n }\n function d3_layout_bundleLeastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = d3_layout_bundleAncestors(a), bNodes = d3_layout_bundleAncestors(b), aNode = aNodes.pop(), bNode = bNodes.pop(), sharedNode = null;\n while (aNode === bNode) {\n sharedNode = aNode;\n aNode = aNodes.pop();\n bNode = bNodes.pop();\n }\n return sharedNode;\n }\n d3.layout.chord = function() {\n var chord = {}, chords, groups, matrix, n, padding = 0, sortGroups, sortSubgroups, sortChords;\n function relayout() {\n var subgroups = {}, groupSums = [], groupIndex = d3.range(n), subgroupIndex = [], k, x, x0, i, j;\n chords = [];\n groups = [];\n k = 0, i = -1;\n while (++i < n) {\n x = 0, j = -1;\n while (++j < n) {\n x += matrix[i][j];\n }\n groupSums.push(x);\n subgroupIndex.push(d3.range(n));\n k += x;\n }\n if (sortGroups) {\n groupIndex.sort(function(a, b) {\n return sortGroups(groupSums[a], groupSums[b]);\n });\n }\n if (sortSubgroups) {\n subgroupIndex.forEach(function(d, i) {\n d.sort(function(a, b) {\n return sortSubgroups(matrix[i][a], matrix[i][b]);\n });\n });\n }\n k = (τ - padding * n) / k;\n x = 0, i = -1;\n while (++i < n) {\n x0 = x, j = -1;\n while (++j < n) {\n var di = groupIndex[i], dj = subgroupIndex[di][j], v = matrix[di][dj], a0 = x, a1 = x += v * k;\n subgroups[di + \"-\" + dj] = {\n index: di,\n subindex: dj,\n startAngle: a0,\n endAngle: a1,\n value: v\n };\n }\n groups[di] = {\n index: di,\n startAngle: x0,\n endAngle: x,\n value: groupSums[di]\n };\n x += padding;\n }\n i = -1;\n while (++i < n) {\n j = i - 1;\n while (++j < n) {\n var source = subgroups[i + \"-\" + j], target = subgroups[j + \"-\" + i];\n if (source.value || target.value) {\n chords.push(source.value < target.value ? {\n source: target,\n target: source\n } : {\n source: source,\n target: target\n });\n }\n }\n }\n if (sortChords) resort();\n }\n function resort() {\n chords.sort(function(a, b) {\n return sortChords((a.source.value + a.target.value) / 2, (b.source.value + b.target.value) / 2);\n });\n }\n chord.matrix = function(x) {\n if (!arguments.length) return matrix;\n n = (matrix = x) && matrix.length;\n chords = groups = null;\n return chord;\n };\n chord.padding = function(x) {\n if (!arguments.length) return padding;\n padding = x;\n chords = groups = null;\n return chord;\n };\n chord.sortGroups = function(x) {\n if (!arguments.length) return sortGroups;\n sortGroups = x;\n chords = groups = null;\n return chord;\n };\n chord.sortSubgroups = function(x) {\n if (!arguments.length) return sortSubgroups;\n sortSubgroups = x;\n chords = null;\n return chord;\n };\n chord.sortChords = function(x) {\n if (!arguments.length) return sortChords;\n sortChords = x;\n if (chords) resort();\n return chord;\n };\n chord.chords = function() {\n if (!chords) relayout();\n return chords;\n };\n chord.groups = function() {\n if (!groups) relayout();\n return groups;\n };\n return chord;\n };\n d3.layout.force = function() {\n var force = {}, event = d3.dispatch(\"start\", \"tick\", \"end\"), timer, size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .64, nodes = [], links = [], distances, strengths, charges;\n function repulse(node) {\n return function(quad, x1, _, x2) {\n if (quad.point !== node) {\n var dx = quad.cx - node.x, dy = quad.cy - node.y, dw = x2 - x1, dn = dx * dx + dy * dy;\n if (dw * dw / theta2 < dn) {\n if (dn < chargeDistance2) {\n var k = quad.charge / dn;\n node.px -= dx * k;\n node.py -= dy * k;\n }\n return true;\n }\n if (quad.point && dn && dn < chargeDistance2) {\n var k = quad.pointCharge / dn;\n node.px -= dx * k;\n node.py -= dy * k;\n }\n }\n return !quad.charge;\n };\n }\n force.tick = function() {\n if ((alpha *= .99) < .005) {\n timer = null;\n event.end({\n type: \"end\",\n alpha: alpha = 0\n });\n return true;\n }\n var n = nodes.length, m = links.length, q, i, o, s, t, l, k, x, y;\n for (i = 0; i < m; ++i) {\n o = links[i];\n s = o.source;\n t = o.target;\n x = t.x - s.x;\n y = t.y - s.y;\n if (l = x * x + y * y) {\n l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;\n x *= l;\n y *= l;\n t.x -= x * (k = s.weight + t.weight ? s.weight / (s.weight + t.weight) : .5);\n t.y -= y * k;\n s.x += x * (k = 1 - k);\n s.y += y * k;\n }\n }\n if (k = alpha * gravity) {\n x = size[0] / 2;\n y = size[1] / 2;\n i = -1;\n if (k) while (++i < n) {\n o = nodes[i];\n o.x += (x - o.x) * k;\n o.y += (y - o.y) * k;\n }\n }\n if (charge) {\n d3_layout_forceAccumulate(q = d3.geom.quadtree(nodes), alpha, charges);\n i = -1;\n while (++i < n) {\n if (!(o = nodes[i]).fixed) {\n q.visit(repulse(o));\n }\n }\n }\n i = -1;\n while (++i < n) {\n o = nodes[i];\n if (o.fixed) {\n o.x = o.px;\n o.y = o.py;\n } else {\n o.x -= (o.px - (o.px = o.x)) * friction;\n o.y -= (o.py - (o.py = o.y)) * friction;\n }\n }\n event.tick({\n type: \"tick\",\n alpha: alpha\n });\n };\n force.nodes = function(x) {\n if (!arguments.length) return nodes;\n nodes = x;\n return force;\n };\n force.links = function(x) {\n if (!arguments.length) return links;\n links = x;\n return force;\n };\n force.size = function(x) {\n if (!arguments.length) return size;\n size = x;\n return force;\n };\n force.linkDistance = function(x) {\n if (!arguments.length) return linkDistance;\n linkDistance = typeof x === \"function\" ? x : +x;\n return force;\n };\n force.distance = force.linkDistance;\n force.linkStrength = function(x) {\n if (!arguments.length) return linkStrength;\n linkStrength = typeof x === \"function\" ? x : +x;\n return force;\n };\n force.friction = function(x) {\n if (!arguments.length) return friction;\n friction = +x;\n return force;\n };\n force.charge = function(x) {\n if (!arguments.length) return charge;\n charge = typeof x === \"function\" ? x : +x;\n return force;\n };\n force.chargeDistance = function(x) {\n if (!arguments.length) return Math.sqrt(chargeDistance2);\n chargeDistance2 = x * x;\n return force;\n };\n force.gravity = function(x) {\n if (!arguments.length) return gravity;\n gravity = +x;\n return force;\n };\n force.theta = function(x) {\n if (!arguments.length) return Math.sqrt(theta2);\n theta2 = x * x;\n return force;\n };\n force.alpha = function(x) {\n if (!arguments.length) return alpha;\n x = +x;\n if (alpha) {\n if (x > 0) {\n alpha = x;\n } else {\n timer.c = null, timer.t = NaN, timer = null;\n event.end({\n type: \"end\",\n alpha: alpha = 0\n });\n }\n } else if (x > 0) {\n event.start({\n type: \"start\",\n alpha: alpha = x\n });\n timer = d3_timer(force.tick);\n }\n return force;\n };\n force.start = function() {\n var i, n = nodes.length, m = links.length, w = size[0], h = size[1], neighbors, o;\n for (i = 0; i < n; ++i) {\n (o = nodes[i]).index = i;\n o.weight = 0;\n }\n for (i = 0; i < m; ++i) {\n o = links[i];\n if (typeof o.source == \"number\") o.source = nodes[o.source];\n if (typeof o.target == \"number\") o.target = nodes[o.target];\n ++o.source.weight;\n ++o.target.weight;\n }\n for (i = 0; i < n; ++i) {\n o = nodes[i];\n if (isNaN(o.x)) o.x = position(\"x\", w);\n if (isNaN(o.y)) o.y = position(\"y\", h);\n if (isNaN(o.px)) o.px = o.x;\n if (isNaN(o.py)) o.py = o.y;\n }\n distances = [];\n if (typeof linkDistance === \"function\") for (i = 0; i < m; ++i) distances[i] = +linkDistance.call(this, links[i], i); else for (i = 0; i < m; ++i) distances[i] = linkDistance;\n strengths = [];\n if (typeof linkStrength === \"function\") for (i = 0; i < m; ++i) strengths[i] = +linkStrength.call(this, links[i], i); else for (i = 0; i < m; ++i) strengths[i] = linkStrength;\n charges = [];\n if (typeof charge === \"function\") for (i = 0; i < n; ++i) charges[i] = +charge.call(this, nodes[i], i); else for (i = 0; i < n; ++i) charges[i] = charge;\n function position(dimension, size) {\n if (!neighbors) {\n neighbors = new Array(n);\n for (j = 0; j < n; ++j) {\n neighbors[j] = [];\n }\n for (j = 0; j < m; ++j) {\n var o = links[j];\n neighbors[o.source.index].push(o.target);\n neighbors[o.target.index].push(o.source);\n }\n }\n var candidates = neighbors[i], j = -1, l = candidates.length, x;\n while (++j < l) if (!isNaN(x = candidates[j][dimension])) return x;\n return Math.random() * size;\n }\n return force.resume();\n };\n force.resume = function() {\n return force.alpha(.1);\n };\n force.stop = function() {\n return force.alpha(0);\n };\n force.drag = function() {\n if (!drag) drag = d3.behavior.drag().origin(d3_identity).on(\"dragstart.force\", d3_layout_forceDragstart).on(\"drag.force\", dragmove).on(\"dragend.force\", d3_layout_forceDragend);\n if (!arguments.length) return drag;\n this.on(\"mouseover.force\", d3_layout_forceMouseover).on(\"mouseout.force\", d3_layout_forceMouseout).call(drag);\n };\n function dragmove(d) {\n d.px = d3.event.x, d.py = d3.event.y;\n force.resume();\n }\n return d3.rebind(force, event, \"on\");\n };\n function d3_layout_forceDragstart(d) {\n d.fixed |= 2;\n }\n function d3_layout_forceDragend(d) {\n d.fixed &= ~6;\n }\n function d3_layout_forceMouseover(d) {\n d.fixed |= 4;\n d.px = d.x, d.py = d.y;\n }\n function d3_layout_forceMouseout(d) {\n d.fixed &= ~4;\n }\n function d3_layout_forceAccumulate(quad, alpha, charges) {\n var cx = 0, cy = 0;\n quad.charge = 0;\n if (!quad.leaf) {\n var nodes = quad.nodes, n = nodes.length, i = -1, c;\n while (++i < n) {\n c = nodes[i];\n if (c == null) continue;\n d3_layout_forceAccumulate(c, alpha, charges);\n quad.charge += c.charge;\n cx += c.charge * c.cx;\n cy += c.charge * c.cy;\n }\n }\n if (quad.point) {\n if (!quad.leaf) {\n quad.point.x += Math.random() - .5;\n quad.point.y += Math.random() - .5;\n }\n var k = alpha * charges[quad.point.index];\n quad.charge += quad.pointCharge = k;\n cx += k * quad.point.x;\n cy += k * quad.point.y;\n }\n quad.cx = cx / quad.charge;\n quad.cy = cy / quad.charge;\n }\n var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity;\n d3.layout.hierarchy = function() {\n var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue;\n function hierarchy(root) {\n var stack = [ root ], nodes = [], node;\n root.depth = 0;\n while ((node = stack.pop()) != null) {\n nodes.push(node);\n if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) {\n var n, childs, child;\n while (--n >= 0) {\n stack.push(child = childs[n]);\n child.parent = node;\n child.depth = node.depth + 1;\n }\n if (value) node.value = 0;\n node.children = childs;\n } else {\n if (value) node.value = +value.call(hierarchy, node, node.depth) || 0;\n delete node.children;\n }\n }\n d3_layout_hierarchyVisitAfter(root, function(node) {\n var childs, parent;\n if (sort && (childs = node.children)) childs.sort(sort);\n if (value && (parent = node.parent)) parent.value += node.value;\n });\n return nodes;\n }\n hierarchy.sort = function(x) {\n if (!arguments.length) return sort;\n sort = x;\n return hierarchy;\n };\n hierarchy.children = function(x) {\n if (!arguments.length) return children;\n children = x;\n return hierarchy;\n };\n hierarchy.value = function(x) {\n if (!arguments.length) return value;\n value = x;\n return hierarchy;\n };\n hierarchy.revalue = function(root) {\n if (value) {\n d3_layout_hierarchyVisitBefore(root, function(node) {\n if (node.children) node.value = 0;\n });\n d3_layout_hierarchyVisitAfter(root, function(node) {\n var parent;\n if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0;\n if (parent = node.parent) parent.value += node.value;\n });\n }\n return root;\n };\n return hierarchy;\n };\n function d3_layout_hierarchyRebind(object, hierarchy) {\n d3.rebind(object, hierarchy, \"sort\", \"children\", \"value\");\n object.nodes = object;\n object.links = d3_layout_hierarchyLinks;\n return object;\n }\n function d3_layout_hierarchyVisitBefore(node, callback) {\n var nodes = [ node ];\n while ((node = nodes.pop()) != null) {\n callback(node);\n if ((children = node.children) && (n = children.length)) {\n var n, children;\n while (--n >= 0) nodes.push(children[n]);\n }\n }\n }\n function d3_layout_hierarchyVisitAfter(node, callback) {\n var nodes = [ node ], nodes2 = [];\n while ((node = nodes.pop()) != null) {\n nodes2.push(node);\n if ((children = node.children) && (n = children.length)) {\n var i = -1, n, children;\n while (++i < n) nodes.push(children[i]);\n }\n }\n while ((node = nodes2.pop()) != null) {\n callback(node);\n }\n }\n function d3_layout_hierarchyChildren(d) {\n return d.children;\n }\n function d3_layout_hierarchyValue(d) {\n return d.value;\n }\n function d3_layout_hierarchySort(a, b) {\n return b.value - a.value;\n }\n function d3_layout_hierarchyLinks(nodes) {\n return d3.merge(nodes.map(function(parent) {\n return (parent.children || []).map(function(child) {\n return {\n source: parent,\n target: child\n };\n });\n }));\n }\n d3.layout.partition = function() {\n var hierarchy = d3.layout.hierarchy(), size = [ 1, 1 ];\n function position(node, x, dx, dy) {\n var children = node.children;\n node.x = x;\n node.y = node.depth * dy;\n node.dx = dx;\n node.dy = dy;\n if (children && (n = children.length)) {\n var i = -1, n, c, d;\n dx = node.value ? dx / node.value : 0;\n while (++i < n) {\n position(c = children[i], x, d = c.value * dx, dy);\n x += d;\n }\n }\n }\n function depth(node) {\n var children = node.children, d = 0;\n if (children && (n = children.length)) {\n var i = -1, n;\n while (++i < n) d = Math.max(d, depth(children[i]));\n }\n return 1 + d;\n }\n function partition(d, i) {\n var nodes = hierarchy.call(this, d, i);\n position(nodes[0], 0, size[0], size[1] / depth(nodes[0]));\n return nodes;\n }\n partition.size = function(x) {\n if (!arguments.length) return size;\n size = x;\n return partition;\n };\n return d3_layout_hierarchyRebind(partition, hierarchy);\n };\n d3.layout.pie = function() {\n var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ, padAngle = 0;\n function pie(data) {\n var n = data.length, values = data.map(function(d, i) {\n return +value.call(pie, d, i);\n }), a = +(typeof startAngle === \"function\" ? startAngle.apply(this, arguments) : startAngle), da = (typeof endAngle === \"function\" ? endAngle.apply(this, arguments) : endAngle) - a, p = Math.min(Math.abs(da) / n, +(typeof padAngle === \"function\" ? padAngle.apply(this, arguments) : padAngle)), pa = p * (da < 0 ? -1 : 1), sum = d3.sum(values), k = sum ? (da - n * pa) / sum : 0, index = d3.range(n), arcs = [], v;\n if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) {\n return values[j] - values[i];\n } : function(i, j) {\n return sort(data[i], data[j]);\n });\n index.forEach(function(i) {\n arcs[i] = {\n data: data[i],\n value: v = values[i],\n startAngle: a,\n endAngle: a += v * k + pa,\n padAngle: p\n };\n });\n return arcs;\n }\n pie.value = function(_) {\n if (!arguments.length) return value;\n value = _;\n return pie;\n };\n pie.sort = function(_) {\n if (!arguments.length) return sort;\n sort = _;\n return pie;\n };\n pie.startAngle = function(_) {\n if (!arguments.length) return startAngle;\n startAngle = _;\n return pie;\n };\n pie.endAngle = function(_) {\n if (!arguments.length) return endAngle;\n endAngle = _;\n return pie;\n };\n pie.padAngle = function(_) {\n if (!arguments.length) return padAngle;\n padAngle = _;\n return pie;\n };\n return pie;\n };\n var d3_layout_pieSortByValue = {};\n d3.layout.stack = function() {\n var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY;\n function stack(data, index) {\n if (!(n = data.length)) return data;\n var series = data.map(function(d, i) {\n return values.call(stack, d, i);\n });\n var points = series.map(function(d) {\n return d.map(function(v, i) {\n return [ x.call(stack, v, i), y.call(stack, v, i) ];\n });\n });\n var orders = order.call(stack, points, index);\n series = d3.permute(series, orders);\n points = d3.permute(points, orders);\n var offsets = offset.call(stack, points, index);\n var m = series[0].length, n, i, j, o;\n for (j = 0; j < m; ++j) {\n out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);\n for (i = 1; i < n; ++i) {\n out.call(stack, series[i][j], o += points[i - 1][j][1], points[i][j][1]);\n }\n }\n return data;\n }\n stack.values = function(x) {\n if (!arguments.length) return values;\n values = x;\n return stack;\n };\n stack.order = function(x) {\n if (!arguments.length) return order;\n order = typeof x === \"function\" ? x : d3_layout_stackOrders.get(x) || d3_layout_stackOrderDefault;\n return stack;\n };\n stack.offset = function(x) {\n if (!arguments.length) return offset;\n offset = typeof x === \"function\" ? x : d3_layout_stackOffsets.get(x) || d3_layout_stackOffsetZero;\n return stack;\n };\n stack.x = function(z) {\n if (!arguments.length) return x;\n x = z;\n return stack;\n };\n stack.y = function(z) {\n if (!arguments.length) return y;\n y = z;\n return stack;\n };\n stack.out = function(z) {\n if (!arguments.length) return out;\n out = z;\n return stack;\n };\n return stack;\n };\n function d3_layout_stackX(d) {\n return d.x;\n }\n function d3_layout_stackY(d) {\n return d.y;\n }\n function d3_layout_stackOut(d, y0, y) {\n d.y0 = y0;\n d.y = y;\n }\n var d3_layout_stackOrders = d3.map({\n \"inside-out\": function(data) {\n var n = data.length, i, j, max = data.map(d3_layout_stackMaxIndex), sums = data.map(d3_layout_stackReduceSum), index = d3.range(n).sort(function(a, b) {\n return max[a] - max[b];\n }), top = 0, bottom = 0, tops = [], bottoms = [];\n for (i = 0; i < n; ++i) {\n j = index[i];\n if (top < bottom) {\n top += sums[j];\n tops.push(j);\n } else {\n bottom += sums[j];\n bottoms.push(j);\n }\n }\n return bottoms.reverse().concat(tops);\n },\n reverse: function(data) {\n return d3.range(data.length).reverse();\n },\n \"default\": d3_layout_stackOrderDefault\n });\n var d3_layout_stackOffsets = d3.map({\n silhouette: function(data) {\n var n = data.length, m = data[0].length, sums = [], max = 0, i, j, o, y0 = [];\n for (j = 0; j < m; ++j) {\n for (i = 0, o = 0; i < n; i++) o += data[i][j][1];\n if (o > max) max = o;\n sums.push(o);\n }\n for (j = 0; j < m; ++j) {\n y0[j] = (max - sums[j]) / 2;\n }\n return y0;\n },\n wiggle: function(data) {\n var n = data.length, x = data[0], m = x.length, i, j, k, s1, s2, s3, dx, o, o0, y0 = [];\n y0[0] = o = o0 = 0;\n for (j = 1; j < m; ++j) {\n for (i = 0, s1 = 0; i < n; ++i) s1 += data[i][j][1];\n for (i = 0, s2 = 0, dx = x[j][0] - x[j - 1][0]; i < n; ++i) {\n for (k = 0, s3 = (data[i][j][1] - data[i][j - 1][1]) / (2 * dx); k < i; ++k) {\n s3 += (data[k][j][1] - data[k][j - 1][1]) / dx;\n }\n s2 += s3 * data[i][j][1];\n }\n y0[j] = o -= s1 ? s2 / s1 * dx : 0;\n if (o < o0) o0 = o;\n }\n for (j = 0; j < m; ++j) y0[j] -= o0;\n return y0;\n },\n expand: function(data) {\n var n = data.length, m = data[0].length, k = 1 / n, i, j, o, y0 = [];\n for (j = 0; j < m; ++j) {\n for (i = 0, o = 0; i < n; i++) o += data[i][j][1];\n if (o) for (i = 0; i < n; i++) data[i][j][1] /= o; else for (i = 0; i < n; i++) data[i][j][1] = k;\n }\n for (j = 0; j < m; ++j) y0[j] = 0;\n return y0;\n },\n zero: d3_layout_stackOffsetZero\n });\n function d3_layout_stackOrderDefault(data) {\n return d3.range(data.length);\n }\n function d3_layout_stackOffsetZero(data) {\n var j = -1, m = data[0].length, y0 = [];\n while (++j < m) y0[j] = 0;\n return y0;\n }\n function d3_layout_stackMaxIndex(array) {\n var i = 1, j = 0, v = array[0][1], k, n = array.length;\n for (;i < n; ++i) {\n if ((k = array[i][1]) > v) {\n j = i;\n v = k;\n }\n }\n return j;\n }\n function d3_layout_stackReduceSum(d) {\n return d.reduce(d3_layout_stackSum, 0);\n }\n function d3_layout_stackSum(p, d) {\n return p + d[1];\n }\n d3.layout.histogram = function() {\n var frequency = true, valuer = Number, ranger = d3_layout_histogramRange, binner = d3_layout_histogramBinSturges;\n function histogram(data, i) {\n var bins = [], values = data.map(valuer, this), range = ranger.call(this, values, i), thresholds = binner.call(this, range, values, i), bin, i = -1, n = values.length, m = thresholds.length - 1, k = frequency ? 1 : 1 / n, x;\n while (++i < m) {\n bin = bins[i] = [];\n bin.dx = thresholds[i + 1] - (bin.x = thresholds[i]);\n bin.y = 0;\n }\n if (m > 0) {\n i = -1;\n while (++i < n) {\n x = values[i];\n if (x >= range[0] && x <= range[1]) {\n bin = bins[d3.bisect(thresholds, x, 1, m) - 1];\n bin.y += k;\n bin.push(data[i]);\n }\n }\n }\n return bins;\n }\n histogram.value = function(x) {\n if (!arguments.length) return valuer;\n valuer = x;\n return histogram;\n };\n histogram.range = function(x) {\n if (!arguments.length) return ranger;\n ranger = d3_functor(x);\n return histogram;\n };\n histogram.bins = function(x) {\n if (!arguments.length) return binner;\n binner = typeof x === \"number\" ? function(range) {\n return d3_layout_histogramBinFixed(range, x);\n } : d3_functor(x);\n return histogram;\n };\n histogram.frequency = function(x) {\n if (!arguments.length) return frequency;\n frequency = !!x;\n return histogram;\n };\n return histogram;\n };\n function d3_layout_histogramBinSturges(range, values) {\n return d3_layout_histogramBinFixed(range, Math.ceil(Math.log(values.length) / Math.LN2 + 1));\n }\n function d3_layout_histogramBinFixed(range, n) {\n var x = -1, b = +range[0], m = (range[1] - b) / n, f = [];\n while (++x <= n) f[x] = m * x + b;\n return f;\n }\n function d3_layout_histogramRange(values) {\n return [ d3.min(values), d3.max(values) ];\n }\n d3.layout.pack = function() {\n var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius;\n function pack(d, i) {\n var nodes = hierarchy.call(this, d, i), root = nodes[0], w = size[0], h = size[1], r = radius == null ? Math.sqrt : typeof radius === \"function\" ? radius : function() {\n return radius;\n };\n root.x = root.y = 0;\n d3_layout_hierarchyVisitAfter(root, function(d) {\n d.r = +r(d.value);\n });\n d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);\n if (padding) {\n var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2;\n d3_layout_hierarchyVisitAfter(root, function(d) {\n d.r += dr;\n });\n d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);\n d3_layout_hierarchyVisitAfter(root, function(d) {\n d.r -= dr;\n });\n }\n d3_layout_packTransform(root, w / 2, h / 2, radius ? 1 : 1 / Math.max(2 * root.r / w, 2 * root.r / h));\n return nodes;\n }\n pack.size = function(_) {\n if (!arguments.length) return size;\n size = _;\n return pack;\n };\n pack.radius = function(_) {\n if (!arguments.length) return radius;\n radius = _ == null || typeof _ === \"function\" ? _ : +_;\n return pack;\n };\n pack.padding = function(_) {\n if (!arguments.length) return padding;\n padding = +_;\n return pack;\n };\n return d3_layout_hierarchyRebind(pack, hierarchy);\n };\n function d3_layout_packSort(a, b) {\n return a.value - b.value;\n }\n function d3_layout_packInsert(a, b) {\n var c = a._pack_next;\n a._pack_next = b;\n b._pack_prev = a;\n b._pack_next = c;\n c._pack_prev = b;\n }\n function d3_layout_packSplice(a, b) {\n a._pack_next = b;\n b._pack_prev = a;\n }\n function d3_layout_packIntersects(a, b) {\n var dx = b.x - a.x, dy = b.y - a.y, dr = a.r + b.r;\n return .999 * dr * dr > dx * dx + dy * dy;\n }\n function d3_layout_packSiblings(node) {\n if (!(nodes = node.children) || !(n = nodes.length)) return;\n var nodes, xMin = Infinity, xMax = -Infinity, yMin = Infinity, yMax = -Infinity, a, b, c, i, j, k, n;\n function bound(node) {\n xMin = Math.min(node.x - node.r, xMin);\n xMax = Math.max(node.x + node.r, xMax);\n yMin = Math.min(node.y - node.r, yMin);\n yMax = Math.max(node.y + node.r, yMax);\n }\n nodes.forEach(d3_layout_packLink);\n a = nodes[0];\n a.x = -a.r;\n a.y = 0;\n bound(a);\n if (n > 1) {\n b = nodes[1];\n b.x = b.r;\n b.y = 0;\n bound(b);\n if (n > 2) {\n c = nodes[2];\n d3_layout_packPlace(a, b, c);\n bound(c);\n d3_layout_packInsert(a, c);\n a._pack_prev = c;\n d3_layout_packInsert(c, b);\n b = a._pack_next;\n for (i = 3; i < n; i++) {\n d3_layout_packPlace(a, b, c = nodes[i]);\n var isect = 0, s1 = 1, s2 = 1;\n for (j = b._pack_next; j !== b; j = j._pack_next, s1++) {\n if (d3_layout_packIntersects(j, c)) {\n isect = 1;\n break;\n }\n }\n if (isect == 1) {\n for (k = a._pack_prev; k !== j._pack_prev; k = k._pack_prev, s2++) {\n if (d3_layout_packIntersects(k, c)) {\n break;\n }\n }\n }\n if (isect) {\n if (s1 < s2 || s1 == s2 && b.r < a.r) d3_layout_packSplice(a, b = j); else d3_layout_packSplice(a = k, b);\n i--;\n } else {\n d3_layout_packInsert(a, c);\n b = c;\n bound(c);\n }\n }\n }\n }\n var cx = (xMin + xMax) / 2, cy = (yMin + yMax) / 2, cr = 0;\n for (i = 0; i < n; i++) {\n c = nodes[i];\n c.x -= cx;\n c.y -= cy;\n cr = Math.max(cr, c.r + Math.sqrt(c.x * c.x + c.y * c.y));\n }\n node.r = cr;\n nodes.forEach(d3_layout_packUnlink);\n }\n function d3_layout_packLink(node) {\n node._pack_next = node._pack_prev = node;\n }\n function d3_layout_packUnlink(node) {\n delete node._pack_next;\n delete node._pack_prev;\n }\n function d3_layout_packTransform(node, x, y, k) {\n var children = node.children;\n node.x = x += k * node.x;\n node.y = y += k * node.y;\n node.r *= k;\n if (children) {\n var i = -1, n = children.length;\n while (++i < n) d3_layout_packTransform(children[i], x, y, k);\n }\n }\n function d3_layout_packPlace(a, b, c) {\n var db = a.r + c.r, dx = b.x - a.x, dy = b.y - a.y;\n if (db && (dx || dy)) {\n var da = b.r + c.r, dc = dx * dx + dy * dy;\n da *= da;\n db *= db;\n var x = .5 + (db - da) / (2 * dc), y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);\n c.x = a.x + x * dx + y * dy;\n c.y = a.y + x * dy - y * dx;\n } else {\n c.x = a.x + db;\n c.y = a.y;\n }\n }\n d3.layout.tree = function() {\n var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = null;\n function tree(d, i) {\n var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0);\n d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z;\n d3_layout_hierarchyVisitBefore(root1, secondWalk);\n if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else {\n var left = root0, right = root0, bottom = root0;\n d3_layout_hierarchyVisitBefore(root0, function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1);\n d3_layout_hierarchyVisitBefore(root0, function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n return nodes;\n }\n function wrapTree(root0) {\n var root1 = {\n A: null,\n children: [ root0 ]\n }, queue = [ root1 ], node1;\n while ((node1 = queue.pop()) != null) {\n for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) {\n queue.push((children[i] = child = {\n _: children[i],\n parent: node1,\n children: (child = children[i].children) && child.slice() || [],\n A: null,\n a: null,\n z: 0,\n m: 0,\n c: 0,\n s: 0,\n t: null,\n i: i\n }).a = child);\n }\n }\n return root1.children[0];\n }\n function firstWalk(v) {\n var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null;\n if (children.length) {\n d3_layout_treeShift(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift;\n while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {\n vom = d3_layout_treeLeft(vom);\n vop = d3_layout_treeRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !d3_layout_treeRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !d3_layout_treeLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n function sizeNode(node) {\n node.x *= size[0];\n node.y = node.depth * size[1];\n }\n tree.separation = function(x) {\n if (!arguments.length) return separation;\n separation = x;\n return tree;\n };\n tree.size = function(x) {\n if (!arguments.length) return nodeSize ? null : size;\n nodeSize = (size = x) == null ? sizeNode : null;\n return tree;\n };\n tree.nodeSize = function(x) {\n if (!arguments.length) return nodeSize ? size : null;\n nodeSize = (size = x) == null ? null : sizeNode;\n return tree;\n };\n return d3_layout_hierarchyRebind(tree, hierarchy);\n };\n function d3_layout_treeSeparation(a, b) {\n return a.parent == b.parent ? 1 : 2;\n }\n function d3_layout_treeLeft(v) {\n var children = v.children;\n return children.length ? children[0] : v.t;\n }\n function d3_layout_treeRight(v) {\n var children = v.children, n;\n return (n = children.length) ? children[n - 1] : v.t;\n }\n function d3_layout_treeMove(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n }\n function d3_layout_treeShift(v) {\n var shift = 0, change = 0, children = v.children, i = children.length, w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n }\n function d3_layout_treeAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n }\n d3.layout.cluster = function() {\n var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false;\n function cluster(d, i) {\n var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0;\n d3_layout_hierarchyVisitAfter(root, function(node) {\n var children = node.children;\n if (children && children.length) {\n node.x = d3_layout_clusterX(children);\n node.y = d3_layout_clusterY(children);\n } else {\n node.x = previousNode ? x += separation(node, previousNode) : 0;\n node.y = 0;\n previousNode = node;\n }\n });\n var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2;\n d3_layout_hierarchyVisitAfter(root, nodeSize ? function(node) {\n node.x = (node.x - root.x) * size[0];\n node.y = (root.y - node.y) * size[1];\n } : function(node) {\n node.x = (node.x - x0) / (x1 - x0) * size[0];\n node.y = (1 - (root.y ? node.y / root.y : 1)) * size[1];\n });\n return nodes;\n }\n cluster.separation = function(x) {\n if (!arguments.length) return separation;\n separation = x;\n return cluster;\n };\n cluster.size = function(x) {\n if (!arguments.length) return nodeSize ? null : size;\n nodeSize = (size = x) == null;\n return cluster;\n };\n cluster.nodeSize = function(x) {\n if (!arguments.length) return nodeSize ? size : null;\n nodeSize = (size = x) != null;\n return cluster;\n };\n return d3_layout_hierarchyRebind(cluster, hierarchy);\n };\n function d3_layout_clusterY(children) {\n return 1 + d3.max(children, function(child) {\n return child.y;\n });\n }\n function d3_layout_clusterX(children) {\n return children.reduce(function(x, child) {\n return x + child.x;\n }, 0) / children.length;\n }\n function d3_layout_clusterLeft(node) {\n var children = node.children;\n return children && children.length ? d3_layout_clusterLeft(children[0]) : node;\n }\n function d3_layout_clusterRight(node) {\n var children = node.children, n;\n return children && (n = children.length) ? d3_layout_clusterRight(children[n - 1]) : node;\n }\n d3.layout.treemap = function() {\n var hierarchy = d3.layout.hierarchy(), round = Math.round, size = [ 1, 1 ], padding = null, pad = d3_layout_treemapPadNull, sticky = false, stickies, mode = \"squarify\", ratio = .5 * (1 + Math.sqrt(5));\n function scale(children, k) {\n var i = -1, n = children.length, child, area;\n while (++i < n) {\n area = (child = children[i]).value * (k < 0 ? 0 : k);\n child.area = isNaN(area) || area <= 0 ? 0 : area;\n }\n }\n function squarify(node) {\n var children = node.children;\n if (children && children.length) {\n var rect = pad(node), row = [], remaining = children.slice(), child, best = Infinity, score, u = mode === \"slice\" ? rect.dx : mode === \"dice\" ? rect.dy : mode === \"slice-dice\" ? node.depth & 1 ? rect.dy : rect.dx : Math.min(rect.dx, rect.dy), n;\n scale(remaining, rect.dx * rect.dy / node.value);\n row.area = 0;\n while ((n = remaining.length) > 0) {\n row.push(child = remaining[n - 1]);\n row.area += child.area;\n if (mode !== \"squarify\" || (score = worst(row, u)) <= best) {\n remaining.pop();\n best = score;\n } else {\n row.area -= row.pop().area;\n position(row, u, rect, false);\n u = Math.min(rect.dx, rect.dy);\n row.length = row.area = 0;\n best = Infinity;\n }\n }\n if (row.length) {\n position(row, u, rect, true);\n row.length = row.area = 0;\n }\n children.forEach(squarify);\n }\n }\n function stickify(node) {\n var children = node.children;\n if (children && children.length) {\n var rect = pad(node), remaining = children.slice(), child, row = [];\n scale(remaining, rect.dx * rect.dy / node.value);\n row.area = 0;\n while (child = remaining.pop()) {\n row.push(child);\n row.area += child.area;\n if (child.z != null) {\n position(row, child.z ? rect.dx : rect.dy, rect, !remaining.length);\n row.length = row.area = 0;\n }\n }\n children.forEach(stickify);\n }\n }\n function worst(row, u) {\n var s = row.area, r, rmax = 0, rmin = Infinity, i = -1, n = row.length;\n while (++i < n) {\n if (!(r = row[i].area)) continue;\n if (r < rmin) rmin = r;\n if (r > rmax) rmax = r;\n }\n s *= s;\n u *= u;\n return s ? Math.max(u * rmax * ratio / s, s / (u * rmin * ratio)) : Infinity;\n }\n function position(row, u, rect, flush) {\n var i = -1, n = row.length, x = rect.x, y = rect.y, v = u ? round(row.area / u) : 0, o;\n if (u == rect.dx) {\n if (flush || v > rect.dy) v = rect.dy;\n while (++i < n) {\n o = row[i];\n o.x = x;\n o.y = y;\n o.dy = v;\n x += o.dx = Math.min(rect.x + rect.dx - x, v ? round(o.area / v) : 0);\n }\n o.z = true;\n o.dx += rect.x + rect.dx - x;\n rect.y += v;\n rect.dy -= v;\n } else {\n if (flush || v > rect.dx) v = rect.dx;\n while (++i < n) {\n o = row[i];\n o.x = x;\n o.y = y;\n o.dx = v;\n y += o.dy = Math.min(rect.y + rect.dy - y, v ? round(o.area / v) : 0);\n }\n o.z = false;\n o.dy += rect.y + rect.dy - y;\n rect.x += v;\n rect.dx -= v;\n }\n }\n function treemap(d) {\n var nodes = stickies || hierarchy(d), root = nodes[0];\n root.x = root.y = 0;\n if (root.value) root.dx = size[0], root.dy = size[1]; else root.dx = root.dy = 0;\n if (stickies) hierarchy.revalue(root);\n scale([ root ], root.dx * root.dy / root.value);\n (stickies ? stickify : squarify)(root);\n if (sticky) stickies = nodes;\n return nodes;\n }\n treemap.size = function(x) {\n if (!arguments.length) return size;\n size = x;\n return treemap;\n };\n treemap.padding = function(x) {\n if (!arguments.length) return padding;\n function padFunction(node) {\n var p = x.call(treemap, node, node.depth);\n return p == null ? d3_layout_treemapPadNull(node) : d3_layout_treemapPad(node, typeof p === \"number\" ? [ p, p, p, p ] : p);\n }\n function padConstant(node) {\n return d3_layout_treemapPad(node, x);\n }\n var type;\n pad = (padding = x) == null ? d3_layout_treemapPadNull : (type = typeof x) === \"function\" ? padFunction : type === \"number\" ? (x = [ x, x, x, x ], \n padConstant) : padConstant;\n return treemap;\n };\n treemap.round = function(x) {\n if (!arguments.length) return round != Number;\n round = x ? Math.round : Number;\n return treemap;\n };\n treemap.sticky = function(x) {\n if (!arguments.length) return sticky;\n sticky = x;\n stickies = null;\n return treemap;\n };\n treemap.ratio = function(x) {\n if (!arguments.length) return ratio;\n ratio = x;\n return treemap;\n };\n treemap.mode = function(x) {\n if (!arguments.length) return mode;\n mode = x + \"\";\n return treemap;\n };\n return d3_layout_hierarchyRebind(treemap, hierarchy);\n };\n function d3_layout_treemapPadNull(node) {\n return {\n x: node.x,\n y: node.y,\n dx: node.dx,\n dy: node.dy\n };\n }\n function d3_layout_treemapPad(node, padding) {\n var x = node.x + padding[3], y = node.y + padding[0], dx = node.dx - padding[1] - padding[3], dy = node.dy - padding[0] - padding[2];\n if (dx < 0) {\n x += dx / 2;\n dx = 0;\n }\n if (dy < 0) {\n y += dy / 2;\n dy = 0;\n }\n return {\n x: x,\n y: y,\n dx: dx,\n dy: dy\n };\n }\n d3.random = {\n normal: function(µ, σ) {\n var n = arguments.length;\n if (n < 2) σ = 1;\n if (n < 1) µ = 0;\n return function() {\n var x, y, r;\n do {\n x = Math.random() * 2 - 1;\n y = Math.random() * 2 - 1;\n r = x * x + y * y;\n } while (!r || r > 1);\n return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r);\n };\n },\n logNormal: function() {\n var random = d3.random.normal.apply(d3, arguments);\n return function() {\n return Math.exp(random());\n };\n },\n bates: function(m) {\n var random = d3.random.irwinHall(m);\n return function() {\n return random() / m;\n };\n },\n irwinHall: function(m) {\n return function() {\n for (var s = 0, j = 0; j < m; j++) s += Math.random();\n return s;\n };\n }\n };\n d3.scale = {};\n function d3_scaleExtent(domain) {\n var start = domain[0], stop = domain[domain.length - 1];\n return start < stop ? [ start, stop ] : [ stop, start ];\n }\n function d3_scaleRange(scale) {\n return scale.rangeExtent ? scale.rangeExtent() : d3_scaleExtent(scale.range());\n }\n function d3_scale_bilinear(domain, range, uninterpolate, interpolate) {\n var u = uninterpolate(domain[0], domain[1]), i = interpolate(range[0], range[1]);\n return function(x) {\n return i(u(x));\n };\n }\n function d3_scale_nice(domain, nice) {\n var i0 = 0, i1 = domain.length - 1, x0 = domain[i0], x1 = domain[i1], dx;\n if (x1 < x0) {\n dx = i0, i0 = i1, i1 = dx;\n dx = x0, x0 = x1, x1 = dx;\n }\n domain[i0] = nice.floor(x0);\n domain[i1] = nice.ceil(x1);\n return domain;\n }\n function d3_scale_niceStep(step) {\n return step ? {\n floor: function(x) {\n return Math.floor(x / step) * step;\n },\n ceil: function(x) {\n return Math.ceil(x / step) * step;\n }\n } : d3_scale_niceIdentity;\n }\n var d3_scale_niceIdentity = {\n floor: d3_identity,\n ceil: d3_identity\n };\n function d3_scale_polylinear(domain, range, uninterpolate, interpolate) {\n var u = [], i = [], j = 0, k = Math.min(domain.length, range.length) - 1;\n if (domain[k] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n while (++j <= k) {\n u.push(uninterpolate(domain[j - 1], domain[j]));\n i.push(interpolate(range[j - 1], range[j]));\n }\n return function(x) {\n var j = d3.bisect(domain, x, 1, k) - 1;\n return i[j](u[j](x));\n };\n }\n d3.scale.linear = function() {\n return d3_scale_linear([ 0, 1 ], [ 0, 1 ], d3_interpolate, false);\n };\n function d3_scale_linear(domain, range, interpolate, clamp) {\n var output, input;\n function rescale() {\n var linear = Math.min(domain.length, range.length) > 2 ? d3_scale_polylinear : d3_scale_bilinear, uninterpolate = clamp ? d3_uninterpolateClamp : d3_uninterpolateNumber;\n output = linear(domain, range, uninterpolate, interpolate);\n input = linear(range, domain, uninterpolate, d3_interpolate);\n return scale;\n }\n function scale(x) {\n return output(x);\n }\n scale.invert = function(y) {\n return input(y);\n };\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n domain = x.map(Number);\n return rescale();\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n return rescale();\n };\n scale.rangeRound = function(x) {\n return scale.range(x).interpolate(d3_interpolateRound);\n };\n scale.clamp = function(x) {\n if (!arguments.length) return clamp;\n clamp = x;\n return rescale();\n };\n scale.interpolate = function(x) {\n if (!arguments.length) return interpolate;\n interpolate = x;\n return rescale();\n };\n scale.ticks = function(m) {\n return d3_scale_linearTicks(domain, m);\n };\n scale.tickFormat = function(m, format) {\n return d3_scale_linearTickFormat(domain, m, format);\n };\n scale.nice = function(m) {\n d3_scale_linearNice(domain, m);\n return rescale();\n };\n scale.copy = function() {\n return d3_scale_linear(domain, range, interpolate, clamp);\n };\n return rescale();\n }\n function d3_scale_linearRebind(scale, linear) {\n return d3.rebind(scale, linear, \"range\", \"rangeRound\", \"interpolate\", \"clamp\");\n }\n function d3_scale_linearNice(domain, m) {\n d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));\n d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));\n return domain;\n }\n function d3_scale_linearTickRange(domain, m) {\n if (m == null) m = 10;\n var extent = d3_scaleExtent(domain), span = extent[1] - extent[0], step = Math.pow(10, Math.floor(Math.log(span / m) / Math.LN10)), err = m / span * step;\n if (err <= .15) step *= 10; else if (err <= .35) step *= 5; else if (err <= .75) step *= 2;\n extent[0] = Math.ceil(extent[0] / step) * step;\n extent[1] = Math.floor(extent[1] / step) * step + step * .5;\n extent[2] = step;\n return extent;\n }\n function d3_scale_linearTicks(domain, m) {\n return d3.range.apply(d3, d3_scale_linearTickRange(domain, m));\n }\n function d3_scale_linearTickFormat(domain, m, format) {\n var range = d3_scale_linearTickRange(domain, m);\n if (format) {\n var match = d3_format_re.exec(format);\n match.shift();\n if (match[8] === \"s\") {\n var prefix = d3.formatPrefix(Math.max(abs(range[0]), abs(range[1])));\n if (!match[7]) match[7] = \".\" + d3_scale_linearPrecision(prefix.scale(range[2]));\n match[8] = \"f\";\n format = d3.format(match.join(\"\"));\n return function(d) {\n return format(prefix.scale(d)) + prefix.symbol;\n };\n }\n if (!match[7]) match[7] = \".\" + d3_scale_linearFormatPrecision(match[8], range);\n format = match.join(\"\");\n } else {\n format = \",.\" + d3_scale_linearPrecision(range[2]) + \"f\";\n }\n return d3.format(format);\n }\n var d3_scale_linearFormatSignificant = {\n s: 1,\n g: 1,\n p: 1,\n r: 1,\n e: 1\n };\n function d3_scale_linearPrecision(value) {\n return -Math.floor(Math.log(value) / Math.LN10 + .01);\n }\n function d3_scale_linearFormatPrecision(type, range) {\n var p = d3_scale_linearPrecision(range[2]);\n return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]), abs(range[1])))) + +(type !== \"e\") : p - (type === \"%\") * 2;\n }\n d3.scale.log = function() {\n return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]);\n };\n function d3_scale_log(linear, base, positive, domain) {\n function log(x) {\n return (positive ? Math.log(x < 0 ? 0 : x) : -Math.log(x > 0 ? 0 : -x)) / Math.log(base);\n }\n function pow(x) {\n return positive ? Math.pow(base, x) : -Math.pow(base, -x);\n }\n function scale(x) {\n return linear(log(x));\n }\n scale.invert = function(x) {\n return pow(linear.invert(x));\n };\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n positive = x[0] >= 0;\n linear.domain((domain = x.map(Number)).map(log));\n return scale;\n };\n scale.base = function(_) {\n if (!arguments.length) return base;\n base = +_;\n linear.domain(domain.map(log));\n return scale;\n };\n scale.nice = function() {\n var niced = d3_scale_nice(domain.map(log), positive ? Math : d3_scale_logNiceNegative);\n linear.domain(niced);\n domain = niced.map(pow);\n return scale;\n };\n scale.ticks = function() {\n var extent = d3_scaleExtent(domain), ticks = [], u = extent[0], v = extent[1], i = Math.floor(log(u)), j = Math.ceil(log(v)), n = base % 1 ? 2 : base;\n if (isFinite(j - i)) {\n if (positive) {\n for (;i < j; i++) for (var k = 1; k < n; k++) ticks.push(pow(i) * k);\n ticks.push(pow(i));\n } else {\n ticks.push(pow(i));\n for (;i++ < j; ) for (var k = n - 1; k > 0; k--) ticks.push(pow(i) * k);\n }\n for (i = 0; ticks[i] < u; i++) {}\n for (j = ticks.length; ticks[j - 1] > v; j--) {}\n ticks = ticks.slice(i, j);\n }\n return ticks;\n };\n scale.tickFormat = function(n, format) {\n if (!arguments.length) return d3_scale_logFormat;\n if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== \"function\") format = d3.format(format);\n var k = Math.max(1, base * n / scale.ticks().length);\n return function(d) {\n var i = d / pow(Math.round(log(d)));\n if (i * base < base - .5) i *= base;\n return i <= k ? format(d) : \"\";\n };\n };\n scale.copy = function() {\n return d3_scale_log(linear.copy(), base, positive, domain);\n };\n return d3_scale_linearRebind(scale, linear);\n }\n var d3_scale_logFormat = d3.format(\".0e\"), d3_scale_logNiceNegative = {\n floor: function(x) {\n return -Math.ceil(-x);\n },\n ceil: function(x) {\n return -Math.floor(-x);\n }\n };\n d3.scale.pow = function() {\n return d3_scale_pow(d3.scale.linear(), 1, [ 0, 1 ]);\n };\n function d3_scale_pow(linear, exponent, domain) {\n var powp = d3_scale_powPow(exponent), powb = d3_scale_powPow(1 / exponent);\n function scale(x) {\n return linear(powp(x));\n }\n scale.invert = function(x) {\n return powb(linear.invert(x));\n };\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n linear.domain((domain = x.map(Number)).map(powp));\n return scale;\n };\n scale.ticks = function(m) {\n return d3_scale_linearTicks(domain, m);\n };\n scale.tickFormat = function(m, format) {\n return d3_scale_linearTickFormat(domain, m, format);\n };\n scale.nice = function(m) {\n return scale.domain(d3_scale_linearNice(domain, m));\n };\n scale.exponent = function(x) {\n if (!arguments.length) return exponent;\n powp = d3_scale_powPow(exponent = x);\n powb = d3_scale_powPow(1 / exponent);\n linear.domain(domain.map(powp));\n return scale;\n };\n scale.copy = function() {\n return d3_scale_pow(linear.copy(), exponent, domain);\n };\n return d3_scale_linearRebind(scale, linear);\n }\n function d3_scale_powPow(e) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, e) : Math.pow(x, e);\n };\n }\n d3.scale.sqrt = function() {\n return d3.scale.pow().exponent(.5);\n };\n d3.scale.ordinal = function() {\n return d3_scale_ordinal([], {\n t: \"range\",\n a: [ [] ]\n });\n };\n function d3_scale_ordinal(domain, ranger) {\n var index, range, rangeBand;\n function scale(x) {\n return range[((index.get(x) || (ranger.t === \"range\" ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length];\n }\n function steps(start, step) {\n return d3.range(domain.length).map(function(i) {\n return start + step * i;\n });\n }\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n domain = [];\n index = new d3_Map();\n var i = -1, n = x.length, xi;\n while (++i < n) if (!index.has(xi = x[i])) index.set(xi, domain.push(xi));\n return scale[ranger.t].apply(scale, ranger.a);\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n rangeBand = 0;\n ranger = {\n t: \"range\",\n a: arguments\n };\n return scale;\n };\n scale.rangePoints = function(x, padding) {\n if (arguments.length < 2) padding = 0;\n var start = x[0], stop = x[1], step = domain.length < 2 ? (start = (start + stop) / 2, \n 0) : (stop - start) / (domain.length - 1 + padding);\n range = steps(start + step * padding / 2, step);\n rangeBand = 0;\n ranger = {\n t: \"rangePoints\",\n a: arguments\n };\n return scale;\n };\n scale.rangeRoundPoints = function(x, padding) {\n if (arguments.length < 2) padding = 0;\n var start = x[0], stop = x[1], step = domain.length < 2 ? (start = stop = Math.round((start + stop) / 2), \n 0) : (stop - start) / (domain.length - 1 + padding) | 0;\n range = steps(start + Math.round(step * padding / 2 + (stop - start - (domain.length - 1 + padding) * step) / 2), step);\n rangeBand = 0;\n ranger = {\n t: \"rangeRoundPoints\",\n a: arguments\n };\n return scale;\n };\n scale.rangeBands = function(x, padding, outerPadding) {\n if (arguments.length < 2) padding = 0;\n if (arguments.length < 3) outerPadding = padding;\n var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = (stop - start) / (domain.length - padding + 2 * outerPadding);\n range = steps(start + step * outerPadding, step);\n if (reverse) range.reverse();\n rangeBand = step * (1 - padding);\n ranger = {\n t: \"rangeBands\",\n a: arguments\n };\n return scale;\n };\n scale.rangeRoundBands = function(x, padding, outerPadding) {\n if (arguments.length < 2) padding = 0;\n if (arguments.length < 3) outerPadding = padding;\n var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding));\n range = steps(start + Math.round((stop - start - (domain.length - padding) * step) / 2), step);\n if (reverse) range.reverse();\n rangeBand = Math.round(step * (1 - padding));\n ranger = {\n t: \"rangeRoundBands\",\n a: arguments\n };\n return scale;\n };\n scale.rangeBand = function() {\n return rangeBand;\n };\n scale.rangeExtent = function() {\n return d3_scaleExtent(ranger.a[0]);\n };\n scale.copy = function() {\n return d3_scale_ordinal(domain, ranger);\n };\n return scale.domain(domain);\n }\n d3.scale.category10 = function() {\n return d3.scale.ordinal().range(d3_category10);\n };\n d3.scale.category20 = function() {\n return d3.scale.ordinal().range(d3_category20);\n };\n d3.scale.category20b = function() {\n return d3.scale.ordinal().range(d3_category20b);\n };\n d3.scale.category20c = function() {\n return d3.scale.ordinal().range(d3_category20c);\n };\n var d3_category10 = [ 2062260, 16744206, 2924588, 14034728, 9725885, 9197131, 14907330, 8355711, 12369186, 1556175 ].map(d3_rgbString);\n var d3_category20 = [ 2062260, 11454440, 16744206, 16759672, 2924588, 10018698, 14034728, 16750742, 9725885, 12955861, 9197131, 12885140, 14907330, 16234194, 8355711, 13092807, 12369186, 14408589, 1556175, 10410725 ].map(d3_rgbString);\n var d3_category20b = [ 3750777, 5395619, 7040719, 10264286, 6519097, 9216594, 11915115, 13556636, 9202993, 12426809, 15186514, 15190932, 8666169, 11356490, 14049643, 15177372, 8077683, 10834324, 13528509, 14589654 ].map(d3_rgbString);\n var d3_category20c = [ 3244733, 7057110, 10406625, 13032431, 15095053, 16616764, 16625259, 16634018, 3253076, 7652470, 10607003, 13101504, 7695281, 10394312, 12369372, 14342891, 6513507, 9868950, 12434877, 14277081 ].map(d3_rgbString);\n d3.scale.quantile = function() {\n return d3_scale_quantile([], []);\n };\n function d3_scale_quantile(domain, range) {\n var thresholds;\n function rescale() {\n var k = 0, q = range.length;\n thresholds = [];\n while (++k < q) thresholds[k - 1] = d3.quantile(domain, k / q);\n return scale;\n }\n function scale(x) {\n if (!isNaN(x = +x)) return range[d3.bisect(thresholds, x)];\n }\n scale.domain = function(x) {\n if (!arguments.length) return domain;\n domain = x.map(d3_number).filter(d3_numeric).sort(d3_ascending);\n return rescale();\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n return rescale();\n };\n scale.quantiles = function() {\n return thresholds;\n };\n scale.invertExtent = function(y) {\n y = range.indexOf(y);\n return y < 0 ? [ NaN, NaN ] : [ y > 0 ? thresholds[y - 1] : domain[0], y < thresholds.length ? thresholds[y] : domain[domain.length - 1] ];\n };\n scale.copy = function() {\n return d3_scale_quantile(domain, range);\n };\n return rescale();\n }\n d3.scale.quantize = function() {\n return d3_scale_quantize(0, 1, [ 0, 1 ]);\n };\n function d3_scale_quantize(x0, x1, range) {\n var kx, i;\n function scale(x) {\n return range[Math.max(0, Math.min(i, Math.floor(kx * (x - x0))))];\n }\n function rescale() {\n kx = range.length / (x1 - x0);\n i = range.length - 1;\n return scale;\n }\n scale.domain = function(x) {\n if (!arguments.length) return [ x0, x1 ];\n x0 = +x[0];\n x1 = +x[x.length - 1];\n return rescale();\n };\n scale.range = function(x) {\n if (!arguments.length) return range;\n range = x;\n return rescale();\n };\n scale.invertExtent = function(y) {\n y = range.indexOf(y);\n y = y < 0 ? NaN : y / kx + x0;\n return [ y, y + 1 / kx ];\n };\n scale.copy = function() {\n return d3_scale_quantize(x0, x1, range);\n };\n return rescale();\n }\n d3.scale.threshold = function() {\n return d3_scale_threshold([ .5 ], [ 0, 1 ]);\n };\n function d3_scale_threshold(domain, range) {\n function scale(x) {\n if (x <= x) return range[d3.bisect(domain, x)];\n }\n scale.domain = function(_) {\n if (!arguments.length) return domain;\n domain = _;\n return scale;\n };\n scale.range = function(_) {\n if (!arguments.length) return range;\n range = _;\n return scale;\n };\n scale.invertExtent = function(y) {\n y = range.indexOf(y);\n return [ domain[y - 1], domain[y] ];\n };\n scale.copy = function() {\n return d3_scale_threshold(domain, range);\n };\n return scale;\n }\n d3.scale.identity = function() {\n return d3_scale_identity([ 0, 1 ]);\n };\n function d3_scale_identity(domain) {\n function identity(x) {\n return +x;\n }\n identity.invert = identity;\n identity.domain = identity.range = function(x) {\n if (!arguments.length) return domain;\n domain = x.map(identity);\n return identity;\n };\n identity.ticks = function(m) {\n return d3_scale_linearTicks(domain, m);\n };\n identity.tickFormat = function(m, format) {\n return d3_scale_linearTickFormat(domain, m, format);\n };\n identity.copy = function() {\n return d3_scale_identity(domain);\n };\n return identity;\n }\n d3.svg = {};\n function d3_zero() {\n return 0;\n }\n d3.svg.arc = function() {\n var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, cornerRadius = d3_zero, padRadius = d3_svg_arcAuto, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle, padAngle = d3_svg_arcPadAngle;\n function arc() {\n var r0 = Math.max(0, +innerRadius.apply(this, arguments)), r1 = Math.max(0, +outerRadius.apply(this, arguments)), a0 = startAngle.apply(this, arguments) - halfπ, a1 = endAngle.apply(this, arguments) - halfπ, da = Math.abs(a1 - a0), cw = a0 > a1 ? 0 : 1;\n if (r1 < r0) rc = r1, r1 = r0, r0 = rc;\n if (da >= τε) return circleSegment(r1, cw) + (r0 ? circleSegment(r0, 1 - cw) : \"\") + \"Z\";\n var rc, cr, rp, ap, p0 = 0, p1 = 0, x0, y0, x1, y1, x2, y2, x3, y3, path = [];\n if (ap = (+padAngle.apply(this, arguments) || 0) / 2) {\n rp = padRadius === d3_svg_arcAuto ? Math.sqrt(r0 * r0 + r1 * r1) : +padRadius.apply(this, arguments);\n if (!cw) p1 *= -1;\n if (r1) p1 = d3_asin(rp / r1 * Math.sin(ap));\n if (r0) p0 = d3_asin(rp / r0 * Math.sin(ap));\n }\n if (r1) {\n x0 = r1 * Math.cos(a0 + p1);\n y0 = r1 * Math.sin(a0 + p1);\n x1 = r1 * Math.cos(a1 - p1);\n y1 = r1 * Math.sin(a1 - p1);\n var l1 = Math.abs(a1 - a0 - 2 * p1) <= π ? 0 : 1;\n if (p1 && d3_svg_arcSweep(x0, y0, x1, y1) === cw ^ l1) {\n var h1 = (a0 + a1) / 2;\n x0 = r1 * Math.cos(h1);\n y0 = r1 * Math.sin(h1);\n x1 = y1 = null;\n }\n } else {\n x0 = y0 = 0;\n }\n if (r0) {\n x2 = r0 * Math.cos(a1 - p0);\n y2 = r0 * Math.sin(a1 - p0);\n x3 = r0 * Math.cos(a0 + p0);\n y3 = r0 * Math.sin(a0 + p0);\n var l0 = Math.abs(a0 - a1 + 2 * p0) <= π ? 0 : 1;\n if (p0 && d3_svg_arcSweep(x2, y2, x3, y3) === 1 - cw ^ l0) {\n var h0 = (a0 + a1) / 2;\n x2 = r0 * Math.cos(h0);\n y2 = r0 * Math.sin(h0);\n x3 = y3 = null;\n }\n } else {\n x2 = y2 = 0;\n }\n if (da > ε && (rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments))) > .001) {\n cr = r0 < r1 ^ cw ? 0 : 1;\n var rc1 = rc, rc0 = rc;\n if (da < π) {\n var oc = x3 == null ? [ x2, y2 ] : x1 == null ? [ x0, y0 ] : d3_geom_polygonIntersect([ x0, y0 ], [ x3, y3 ], [ x1, y1 ], [ x2, y2 ]), ax = x0 - oc[0], ay = y0 - oc[1], bx = x1 - oc[0], by = y1 - oc[1], kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2), lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = Math.min(rc, (r0 - lc) / (kc - 1));\n rc1 = Math.min(rc, (r1 - lc) / (kc + 1));\n }\n if (x1 != null) {\n var t30 = d3_svg_arcCornerTangents(x3 == null ? [ x2, y2 ] : [ x3, y3 ], [ x0, y0 ], r1, rc1, cw), t12 = d3_svg_arcCornerTangents([ x1, y1 ], [ x2, y2 ], r1, rc1, cw);\n if (rc === rc1) {\n path.push(\"M\", t30[0], \"A\", rc1, \",\", rc1, \" 0 0,\", cr, \" \", t30[1], \"A\", r1, \",\", r1, \" 0 \", 1 - cw ^ d3_svg_arcSweep(t30[1][0], t30[1][1], t12[1][0], t12[1][1]), \",\", cw, \" \", t12[1], \"A\", rc1, \",\", rc1, \" 0 0,\", cr, \" \", t12[0]);\n } else {\n path.push(\"M\", t30[0], \"A\", rc1, \",\", rc1, \" 0 1,\", cr, \" \", t12[0]);\n }\n } else {\n path.push(\"M\", x0, \",\", y0);\n }\n if (x3 != null) {\n var t03 = d3_svg_arcCornerTangents([ x0, y0 ], [ x3, y3 ], r0, -rc0, cw), t21 = d3_svg_arcCornerTangents([ x2, y2 ], x1 == null ? [ x0, y0 ] : [ x1, y1 ], r0, -rc0, cw);\n if (rc === rc0) {\n path.push(\"L\", t21[0], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t21[1], \"A\", r0, \",\", r0, \" 0 \", cw ^ d3_svg_arcSweep(t21[1][0], t21[1][1], t03[1][0], t03[1][1]), \",\", 1 - cw, \" \", t03[1], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t03[0]);\n } else {\n path.push(\"L\", t21[0], \"A\", rc0, \",\", rc0, \" 0 0,\", cr, \" \", t03[0]);\n }\n } else {\n path.push(\"L\", x2, \",\", y2);\n }\n } else {\n path.push(\"M\", x0, \",\", y0);\n if (x1 != null) path.push(\"A\", r1, \",\", r1, \" 0 \", l1, \",\", cw, \" \", x1, \",\", y1);\n path.push(\"L\", x2, \",\", y2);\n if (x3 != null) path.push(\"A\", r0, \",\", r0, \" 0 \", l0, \",\", 1 - cw, \" \", x3, \",\", y3);\n }\n path.push(\"Z\");\n return path.join(\"\");\n }\n function circleSegment(r1, cw) {\n return \"M0,\" + r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + -r1 + \"A\" + r1 + \",\" + r1 + \" 0 1,\" + cw + \" 0,\" + r1;\n }\n arc.innerRadius = function(v) {\n if (!arguments.length) return innerRadius;\n innerRadius = d3_functor(v);\n return arc;\n };\n arc.outerRadius = function(v) {\n if (!arguments.length) return outerRadius;\n outerRadius = d3_functor(v);\n return arc;\n };\n arc.cornerRadius = function(v) {\n if (!arguments.length) return cornerRadius;\n cornerRadius = d3_functor(v);\n return arc;\n };\n arc.padRadius = function(v) {\n if (!arguments.length) return padRadius;\n padRadius = v == d3_svg_arcAuto ? d3_svg_arcAuto : d3_functor(v);\n return arc;\n };\n arc.startAngle = function(v) {\n if (!arguments.length) return startAngle;\n startAngle = d3_functor(v);\n return arc;\n };\n arc.endAngle = function(v) {\n if (!arguments.length) return endAngle;\n endAngle = d3_functor(v);\n return arc;\n };\n arc.padAngle = function(v) {\n if (!arguments.length) return padAngle;\n padAngle = d3_functor(v);\n return arc;\n };\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - halfπ;\n return [ Math.cos(a) * r, Math.sin(a) * r ];\n };\n return arc;\n };\n var d3_svg_arcAuto = \"auto\";\n function d3_svg_arcInnerRadius(d) {\n return d.innerRadius;\n }\n function d3_svg_arcOuterRadius(d) {\n return d.outerRadius;\n }\n function d3_svg_arcStartAngle(d) {\n return d.startAngle;\n }\n function d3_svg_arcEndAngle(d) {\n return d.endAngle;\n }\n function d3_svg_arcPadAngle(d) {\n return d && d.padAngle;\n }\n function d3_svg_arcSweep(x0, y0, x1, y1) {\n return (x0 - x1) * y0 - (y0 - y1) * x0 > 0 ? 0 : 1;\n }\n function d3_svg_arcCornerTangents(p0, p1, r1, rc, cw) {\n var x01 = p0[0] - p1[0], y01 = p0[1] - p1[1], lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01), ox = lo * y01, oy = -lo * x01, x1 = p0[0] + ox, y1 = p0[1] + oy, x2 = p1[0] + ox, y2 = p1[1] + oy, x3 = (x1 + x2) / 2, y3 = (y1 + y2) / 2, dx = x2 - x1, dy = y2 - y1, d2 = dx * dx + dy * dy, r = r1 - rc, D = x1 * y2 - x2 * y1, d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)), cx0 = (D * dy - dx * d) / d2, cy0 = (-D * dx - dy * d) / d2, cx1 = (D * dy + dx * d) / d2, cy1 = (-D * dx + dy * d) / d2, dx0 = cx0 - x3, dy0 = cy0 - y3, dx1 = cx1 - x3, dy1 = cy1 - y3;\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n return [ [ cx0 - ox, cy0 - oy ], [ cx0 * r1 / r, cy0 * r1 / r ] ];\n }\n function d3_svg_line(projection) {\n var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7;\n function line(data) {\n var segments = [], points = [], i = -1, n = data.length, d, fx = d3_functor(x), fy = d3_functor(y);\n function segment() {\n segments.push(\"M\", interpolate(projection(points), tension));\n }\n while (++i < n) {\n if (defined.call(this, d = data[i], i)) {\n points.push([ +fx.call(this, d, i), +fy.call(this, d, i) ]);\n } else if (points.length) {\n segment();\n points = [];\n }\n }\n if (points.length) segment();\n return segments.length ? segments.join(\"\") : null;\n }\n line.x = function(_) {\n if (!arguments.length) return x;\n x = _;\n return line;\n };\n line.y = function(_) {\n if (!arguments.length) return y;\n y = _;\n return line;\n };\n line.defined = function(_) {\n if (!arguments.length) return defined;\n defined = _;\n return line;\n };\n line.interpolate = function(_) {\n if (!arguments.length) return interpolateKey;\n if (typeof _ === \"function\") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;\n return line;\n };\n line.tension = function(_) {\n if (!arguments.length) return tension;\n tension = _;\n return line;\n };\n return line;\n }\n d3.svg.line = function() {\n return d3_svg_line(d3_identity);\n };\n var d3_svg_lineInterpolators = d3.map({\n linear: d3_svg_lineLinear,\n \"linear-closed\": d3_svg_lineLinearClosed,\n step: d3_svg_lineStep,\n \"step-before\": d3_svg_lineStepBefore,\n \"step-after\": d3_svg_lineStepAfter,\n basis: d3_svg_lineBasis,\n \"basis-open\": d3_svg_lineBasisOpen,\n \"basis-closed\": d3_svg_lineBasisClosed,\n bundle: d3_svg_lineBundle,\n cardinal: d3_svg_lineCardinal,\n \"cardinal-open\": d3_svg_lineCardinalOpen,\n \"cardinal-closed\": d3_svg_lineCardinalClosed,\n monotone: d3_svg_lineMonotone\n });\n d3_svg_lineInterpolators.forEach(function(key, value) {\n value.key = key;\n value.closed = /-closed$/.test(key);\n });\n function d3_svg_lineLinear(points) {\n return points.length > 1 ? points.join(\"L\") : points + \"Z\";\n }\n function d3_svg_lineLinearClosed(points) {\n return points.join(\"L\") + \"Z\";\n }\n function d3_svg_lineStep(points) {\n var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n while (++i < n) path.push(\"H\", (p[0] + (p = points[i])[0]) / 2, \"V\", p[1]);\n if (n > 1) path.push(\"H\", p[0]);\n return path.join(\"\");\n }\n function d3_svg_lineStepBefore(points) {\n var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n while (++i < n) path.push(\"V\", (p = points[i])[1], \"H\", p[0]);\n return path.join(\"\");\n }\n function d3_svg_lineStepAfter(points) {\n var i = 0, n = points.length, p = points[0], path = [ p[0], \",\", p[1] ];\n while (++i < n) path.push(\"H\", (p = points[i])[0], \"V\", p[1]);\n return path.join(\"\");\n }\n function d3_svg_lineCardinalOpen(points, tension) {\n return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, -1), d3_svg_lineCardinalTangents(points, tension));\n }\n function d3_svg_lineCardinalClosed(points, tension) {\n return points.length < 3 ? d3_svg_lineLinearClosed(points) : points[0] + d3_svg_lineHermite((points.push(points[0]), \n points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension));\n }\n function d3_svg_lineCardinal(points, tension) {\n return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineCardinalTangents(points, tension));\n }\n function d3_svg_lineHermite(points, tangents) {\n if (tangents.length < 1 || points.length != tangents.length && points.length != tangents.length + 2) {\n return d3_svg_lineLinear(points);\n }\n var quad = points.length != tangents.length, path = \"\", p0 = points[0], p = points[1], t0 = tangents[0], t = t0, pi = 1;\n if (quad) {\n path += \"Q\" + (p[0] - t0[0] * 2 / 3) + \",\" + (p[1] - t0[1] * 2 / 3) + \",\" + p[0] + \",\" + p[1];\n p0 = points[1];\n pi = 2;\n }\n if (tangents.length > 1) {\n t = tangents[1];\n p = points[pi];\n pi++;\n path += \"C\" + (p0[0] + t0[0]) + \",\" + (p0[1] + t0[1]) + \",\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];\n for (var i = 2; i < tangents.length; i++, pi++) {\n p = points[pi];\n t = tangents[i];\n path += \"S\" + (p[0] - t[0]) + \",\" + (p[1] - t[1]) + \",\" + p[0] + \",\" + p[1];\n }\n }\n if (quad) {\n var lp = points[pi];\n path += \"Q\" + (p[0] + t[0] * 2 / 3) + \",\" + (p[1] + t[1] * 2 / 3) + \",\" + lp[0] + \",\" + lp[1];\n }\n return path;\n }\n function d3_svg_lineCardinalTangents(points, tension) {\n var tangents = [], a = (1 - tension) / 2, p0, p1 = points[0], p2 = points[1], i = 1, n = points.length;\n while (++i < n) {\n p0 = p1;\n p1 = p2;\n p2 = points[i];\n tangents.push([ a * (p2[0] - p0[0]), a * (p2[1] - p0[1]) ]);\n }\n return tangents;\n }\n function d3_svg_lineBasis(points) {\n if (points.length < 3) return d3_svg_lineLinear(points);\n var i = 1, n = points.length, pi = points[0], x0 = pi[0], y0 = pi[1], px = [ x0, x0, x0, (pi = points[1])[0] ], py = [ y0, y0, y0, pi[1] ], path = [ x0, \",\", y0, \"L\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];\n points.push(points[n - 1]);\n while (++i <= n) {\n pi = points[i];\n px.shift();\n px.push(pi[0]);\n py.shift();\n py.push(pi[1]);\n d3_svg_lineBasisBezier(path, px, py);\n }\n points.pop();\n path.push(\"L\", pi);\n return path.join(\"\");\n }\n function d3_svg_lineBasisOpen(points) {\n if (points.length < 4) return d3_svg_lineLinear(points);\n var path = [], i = -1, n = points.length, pi, px = [ 0 ], py = [ 0 ];\n while (++i < 3) {\n pi = points[i];\n px.push(pi[0]);\n py.push(pi[1]);\n }\n path.push(d3_svg_lineDot4(d3_svg_lineBasisBezier3, px) + \",\" + d3_svg_lineDot4(d3_svg_lineBasisBezier3, py));\n --i;\n while (++i < n) {\n pi = points[i];\n px.shift();\n px.push(pi[0]);\n py.shift();\n py.push(pi[1]);\n d3_svg_lineBasisBezier(path, px, py);\n }\n return path.join(\"\");\n }\n function d3_svg_lineBasisClosed(points) {\n var path, i = -1, n = points.length, m = n + 4, pi, px = [], py = [];\n while (++i < 4) {\n pi = points[i % n];\n px.push(pi[0]);\n py.push(pi[1]);\n }\n path = [ d3_svg_lineDot4(d3_svg_lineBasisBezier3, px), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, py) ];\n --i;\n while (++i < m) {\n pi = points[i % n];\n px.shift();\n px.push(pi[0]);\n py.shift();\n py.push(pi[1]);\n d3_svg_lineBasisBezier(path, px, py);\n }\n return path.join(\"\");\n }\n function d3_svg_lineBundle(points, tension) {\n var n = points.length - 1;\n if (n) {\n var x0 = points[0][0], y0 = points[0][1], dx = points[n][0] - x0, dy = points[n][1] - y0, i = -1, p, t;\n while (++i <= n) {\n p = points[i];\n t = i / n;\n p[0] = tension * p[0] + (1 - tension) * (x0 + t * dx);\n p[1] = tension * p[1] + (1 - tension) * (y0 + t * dy);\n }\n }\n return d3_svg_lineBasis(points);\n }\n function d3_svg_lineDot4(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];\n }\n var d3_svg_lineBasisBezier1 = [ 0, 2 / 3, 1 / 3, 0 ], d3_svg_lineBasisBezier2 = [ 0, 1 / 3, 2 / 3, 0 ], d3_svg_lineBasisBezier3 = [ 0, 1 / 6, 2 / 3, 1 / 6 ];\n function d3_svg_lineBasisBezier(path, x, y) {\n path.push(\"C\", d3_svg_lineDot4(d3_svg_lineBasisBezier1, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier1, y), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier2, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier2, y), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, x), \",\", d3_svg_lineDot4(d3_svg_lineBasisBezier3, y));\n }\n function d3_svg_lineSlope(p0, p1) {\n return (p1[1] - p0[1]) / (p1[0] - p0[0]);\n }\n function d3_svg_lineFiniteDifferences(points) {\n var i = 0, j = points.length - 1, m = [], p0 = points[0], p1 = points[1], d = m[0] = d3_svg_lineSlope(p0, p1);\n while (++i < j) {\n m[i] = (d + (d = d3_svg_lineSlope(p0 = p1, p1 = points[i + 1]))) / 2;\n }\n m[i] = d;\n return m;\n }\n function d3_svg_lineMonotoneTangents(points) {\n var tangents = [], d, a, b, s, m = d3_svg_lineFiniteDifferences(points), i = -1, j = points.length - 1;\n while (++i < j) {\n d = d3_svg_lineSlope(points[i], points[i + 1]);\n if (abs(d) < ε) {\n m[i] = m[i + 1] = 0;\n } else {\n a = m[i] / d;\n b = m[i + 1] / d;\n s = a * a + b * b;\n if (s > 9) {\n s = d * 3 / Math.sqrt(s);\n m[i] = s * a;\n m[i + 1] = s * b;\n }\n }\n }\n i = -1;\n while (++i <= j) {\n s = (points[Math.min(j, i + 1)][0] - points[Math.max(0, i - 1)][0]) / (6 * (1 + m[i] * m[i]));\n tangents.push([ s || 0, m[i] * s || 0 ]);\n }\n return tangents;\n }\n function d3_svg_lineMonotone(points) {\n return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite(points, d3_svg_lineMonotoneTangents(points));\n }\n d3.svg.line.radial = function() {\n var line = d3_svg_line(d3_svg_lineRadial);\n line.radius = line.x, delete line.x;\n line.angle = line.y, delete line.y;\n return line;\n };\n function d3_svg_lineRadial(points) {\n var point, i = -1, n = points.length, r, a;\n while (++i < n) {\n point = points[i];\n r = point[0];\n a = point[1] - halfπ;\n point[0] = r * Math.cos(a);\n point[1] = r * Math.sin(a);\n }\n return points;\n }\n function d3_svg_area(projection) {\n var x0 = d3_geom_pointX, x1 = d3_geom_pointX, y0 = 0, y1 = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, interpolateReverse = interpolate, L = \"L\", tension = .7;\n function area(data) {\n var segments = [], points0 = [], points1 = [], i = -1, n = data.length, d, fx0 = d3_functor(x0), fy0 = d3_functor(y0), fx1 = x0 === x1 ? function() {\n return x;\n } : d3_functor(x1), fy1 = y0 === y1 ? function() {\n return y;\n } : d3_functor(y1), x, y;\n function segment() {\n segments.push(\"M\", interpolate(projection(points1), tension), L, interpolateReverse(projection(points0.reverse()), tension), \"Z\");\n }\n while (++i < n) {\n if (defined.call(this, d = data[i], i)) {\n points0.push([ x = +fx0.call(this, d, i), y = +fy0.call(this, d, i) ]);\n points1.push([ +fx1.call(this, d, i), +fy1.call(this, d, i) ]);\n } else if (points0.length) {\n segment();\n points0 = [];\n points1 = [];\n }\n }\n if (points0.length) segment();\n return segments.length ? segments.join(\"\") : null;\n }\n area.x = function(_) {\n if (!arguments.length) return x1;\n x0 = x1 = _;\n return area;\n };\n area.x0 = function(_) {\n if (!arguments.length) return x0;\n x0 = _;\n return area;\n };\n area.x1 = function(_) {\n if (!arguments.length) return x1;\n x1 = _;\n return area;\n };\n area.y = function(_) {\n if (!arguments.length) return y1;\n y0 = y1 = _;\n return area;\n };\n area.y0 = function(_) {\n if (!arguments.length) return y0;\n y0 = _;\n return area;\n };\n area.y1 = function(_) {\n if (!arguments.length) return y1;\n y1 = _;\n return area;\n };\n area.defined = function(_) {\n if (!arguments.length) return defined;\n defined = _;\n return area;\n };\n area.interpolate = function(_) {\n if (!arguments.length) return interpolateKey;\n if (typeof _ === \"function\") interpolateKey = interpolate = _; else interpolateKey = (interpolate = d3_svg_lineInterpolators.get(_) || d3_svg_lineLinear).key;\n interpolateReverse = interpolate.reverse || interpolate;\n L = interpolate.closed ? \"M\" : \"L\";\n return area;\n };\n area.tension = function(_) {\n if (!arguments.length) return tension;\n tension = _;\n return area;\n };\n return area;\n }\n d3_svg_lineStepBefore.reverse = d3_svg_lineStepAfter;\n d3_svg_lineStepAfter.reverse = d3_svg_lineStepBefore;\n d3.svg.area = function() {\n return d3_svg_area(d3_identity);\n };\n d3.svg.area.radial = function() {\n var area = d3_svg_area(d3_svg_lineRadial);\n area.radius = area.x, delete area.x;\n area.innerRadius = area.x0, delete area.x0;\n area.outerRadius = area.x1, delete area.x1;\n area.angle = area.y, delete area.y;\n area.startAngle = area.y0, delete area.y0;\n area.endAngle = area.y1, delete area.y1;\n return area;\n };\n d3.svg.chord = function() {\n var source = d3_source, target = d3_target, radius = d3_svg_chordRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;\n function chord(d, i) {\n var s = subgroup(this, source, d, i), t = subgroup(this, target, d, i);\n // ONTO Patch!!! See WB-842\n // Do not render the arcs when their are too close to each other as this results into a whole circle\n var renderArc = function(sGr) {\n return !(Math.abs(sGr.p0[0]*1000 - sGr.p1[0]*1000) < 1 && Math.abs(sGr.p0[1]*1000 - sGr.p1[1]*1000) < 1);\n }\n return \"M\" + s.p0 + (renderArc(s) ? arc(s.r, s.p1, s.a1 - s.a0) : \"\") + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + (renderArc(t) ? arc(t.r, t.p1, t.a1 - t.a0) : \"\") + curve(t.r, t.p1, s.r, s.p0)) + \"Z\";\n }\n function subgroup(self, f, d, i) {\n var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) - halfπ, a1 = endAngle.call(self, subgroup, i) - halfπ;\n return {\n r: r,\n a0: a0,\n a1: a1,\n p0: [ r * Math.cos(a0), r * Math.sin(a0) ],\n p1: [ r * Math.cos(a1), r * Math.sin(a1) ]\n };\n }\n function equals(a, b) {\n return a.a0 == b.a0 && a.a1 == b.a1;\n }\n function arc(r, p, a) {\n return \"A\" + r + \",\" + r + \" 0 \" + +(a > π) + \",1 \" + p;\n }\n function curve(r0, p0, r1, p1) {\n return \"Q 0,0 \" + p1;\n }\n chord.radius = function(v) {\n if (!arguments.length) return radius;\n radius = d3_functor(v);\n return chord;\n };\n chord.source = function(v) {\n if (!arguments.length) return source;\n source = d3_functor(v);\n return chord;\n };\n chord.target = function(v) {\n if (!arguments.length) return target;\n target = d3_functor(v);\n return chord;\n };\n chord.startAngle = function(v) {\n if (!arguments.length) return startAngle;\n startAngle = d3_functor(v);\n return chord;\n };\n chord.endAngle = function(v) {\n if (!arguments.length) return endAngle;\n endAngle = d3_functor(v);\n return chord;\n };\n return chord;\n };\n function d3_svg_chordRadius(d) {\n return d.radius;\n }\n d3.svg.diagonal = function() {\n var source = d3_source, target = d3_target, projection = d3_svg_diagonalProjection;\n function diagonal(d, i) {\n var p0 = source.call(this, d, i), p3 = target.call(this, d, i), m = (p0.y + p3.y) / 2, p = [ p0, {\n x: p0.x,\n y: m\n }, {\n x: p3.x,\n y: m\n }, p3 ];\n p = p.map(projection);\n return \"M\" + p[0] + \"C\" + p[1] + \" \" + p[2] + \" \" + p[3];\n }\n diagonal.source = function(x) {\n if (!arguments.length) return source;\n source = d3_functor(x);\n return diagonal;\n };\n diagonal.target = function(x) {\n if (!arguments.length) return target;\n target = d3_functor(x);\n return diagonal;\n };\n diagonal.projection = function(x) {\n if (!arguments.length) return projection;\n projection = x;\n return diagonal;\n };\n return diagonal;\n };\n function d3_svg_diagonalProjection(d) {\n return [ d.x, d.y ];\n }\n d3.svg.diagonal.radial = function() {\n var diagonal = d3.svg.diagonal(), projection = d3_svg_diagonalProjection, projection_ = diagonal.projection;\n diagonal.projection = function(x) {\n return arguments.length ? projection_(d3_svg_diagonalRadialProjection(projection = x)) : projection;\n };\n return diagonal;\n };\n function d3_svg_diagonalRadialProjection(projection) {\n return function() {\n var d = projection.apply(this, arguments), r = d[0], a = d[1] - halfπ;\n return [ r * Math.cos(a), r * Math.sin(a) ];\n };\n }\n d3.svg.symbol = function() {\n var type = d3_svg_symbolType, size = d3_svg_symbolSize;\n function symbol(d, i) {\n return (d3_svg_symbols.get(type.call(this, d, i)) || d3_svg_symbolCircle)(size.call(this, d, i));\n }\n symbol.type = function(x) {\n if (!arguments.length) return type;\n type = d3_functor(x);\n return symbol;\n };\n symbol.size = function(x) {\n if (!arguments.length) return size;\n size = d3_functor(x);\n return symbol;\n };\n return symbol;\n };\n function d3_svg_symbolSize() {\n return 64;\n }\n function d3_svg_symbolType() {\n return \"circle\";\n }\n function d3_svg_symbolCircle(size) {\n var r = Math.sqrt(size / π);\n return \"M0,\" + r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + -r + \"A\" + r + \",\" + r + \" 0 1,1 0,\" + r + \"Z\";\n }\n var d3_svg_symbols = d3.map({\n circle: d3_svg_symbolCircle,\n cross: function(size) {\n var r = Math.sqrt(size / 5) / 2;\n return \"M\" + -3 * r + \",\" + -r + \"H\" + -r + \"V\" + -3 * r + \"H\" + r + \"V\" + -r + \"H\" + 3 * r + \"V\" + r + \"H\" + r + \"V\" + 3 * r + \"H\" + -r + \"V\" + r + \"H\" + -3 * r + \"Z\";\n },\n diamond: function(size) {\n var ry = Math.sqrt(size / (2 * d3_svg_symbolTan30)), rx = ry * d3_svg_symbolTan30;\n return \"M0,\" + -ry + \"L\" + rx + \",0\" + \" 0,\" + ry + \" \" + -rx + \",0\" + \"Z\";\n },\n square: function(size) {\n var r = Math.sqrt(size) / 2;\n return \"M\" + -r + \",\" + -r + \"L\" + r + \",\" + -r + \" \" + r + \",\" + r + \" \" + -r + \",\" + r + \"Z\";\n },\n \"triangle-down\": function(size) {\n var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;\n return \"M0,\" + ry + \"L\" + rx + \",\" + -ry + \" \" + -rx + \",\" + -ry + \"Z\";\n },\n \"triangle-up\": function(size) {\n var rx = Math.sqrt(size / d3_svg_symbolSqrt3), ry = rx * d3_svg_symbolSqrt3 / 2;\n return \"M0,\" + -ry + \"L\" + rx + \",\" + ry + \" \" + -rx + \",\" + ry + \"Z\";\n }\n });\n d3.svg.symbolTypes = d3_svg_symbols.keys();\n var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians);\n d3_selectionPrototype.transition = function(name) {\n var id = d3_transitionInheritId || ++d3_transitionId, ns = d3_transitionNamespace(name), subgroups = [], subgroup, node, transition = d3_transitionInherit || {\n time: Date.now(),\n ease: d3_ease_cubicInOut,\n delay: 0,\n duration: 250\n };\n for (var j = -1, m = this.length; ++j < m; ) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) d3_transitionNode(node, i, ns, id, transition);\n subgroup.push(node);\n }\n }\n return d3_transition(subgroups, ns, id);\n };\n d3_selectionPrototype.interrupt = function(name) {\n return this.each(name == null ? d3_selection_interrupt : d3_selection_interruptNS(d3_transitionNamespace(name)));\n };\n var d3_selection_interrupt = d3_selection_interruptNS(d3_transitionNamespace());\n function d3_selection_interruptNS(ns) {\n return function() {\n var lock, activeId, active;\n if ((lock = this[ns]) && (active = lock[activeId = lock.active])) {\n active.timer.c = null;\n active.timer.t = NaN;\n if (--lock.count) delete lock[activeId]; else delete this[ns];\n lock.active += .5;\n active.event && active.event.interrupt.call(this, this.__data__, active.index);\n }\n };\n }\n function d3_transition(groups, ns, id) {\n d3_subclass(groups, d3_transitionPrototype);\n groups.namespace = ns;\n groups.id = id;\n return groups;\n }\n var d3_transitionPrototype = [], d3_transitionId = 0, d3_transitionInheritId, d3_transitionInherit;\n d3_transitionPrototype.call = d3_selectionPrototype.call;\n d3_transitionPrototype.empty = d3_selectionPrototype.empty;\n d3_transitionPrototype.node = d3_selectionPrototype.node;\n d3_transitionPrototype.size = d3_selectionPrototype.size;\n d3.transition = function(selection, name) {\n return selection && selection.transition ? d3_transitionInheritId ? selection.transition(name) : selection : d3.selection().transition(selection);\n };\n d3.transition.prototype = d3_transitionPrototype;\n d3_transitionPrototype.select = function(selector) {\n var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnode, node;\n selector = d3_selection_selector(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n d3_transitionNode(subnode, i, ns, id, node[ns][id]);\n subgroup.push(subnode);\n } else {\n subgroup.push(null);\n }\n }\n }\n return d3_transition(subgroups, ns, id);\n };\n d3_transitionPrototype.selectAll = function(selector) {\n var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnodes, node, subnode, transition;\n selector = d3_selection_selectorAll(selector);\n for (var j = -1, m = this.length; ++j < m; ) {\n for (var group = this[j], i = -1, n = group.length; ++i < n; ) {\n if (node = group[i]) {\n transition = node[ns][id];\n subnodes = selector.call(node, node.__data__, i, j);\n subgroups.push(subgroup = []);\n for (var k = -1, o = subnodes.length; ++k < o; ) {\n if (subnode = subnodes[k]) d3_transitionNode(subnode, k, ns, id, transition);\n subgroup.push(subnode);\n }\n }\n }\n }\n return d3_transition(subgroups, ns, id);\n };\n d3_transitionPrototype.filter = function(filter) {\n var subgroups = [], subgroup, group, node;\n if (typeof filter !== \"function\") filter = d3_selection_filter(filter);\n for (var j = 0, m = this.length; j < m; j++) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n if ((node = group[i]) && filter.call(node, node.__data__, i, j)) {\n subgroup.push(node);\n }\n }\n }\n return d3_transition(subgroups, this.namespace, this.id);\n };\n d3_transitionPrototype.tween = function(name, tween) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 2) return this.node()[ns][id].tween.get(name);\n return d3_selection_each(this, tween == null ? function(node) {\n node[ns][id].tween.remove(name);\n } : function(node) {\n node[ns][id].tween.set(name, tween);\n });\n };\n function d3_transition_tween(groups, name, value, tween) {\n var id = groups.id, ns = groups.namespace;\n return d3_selection_each(groups, typeof value === \"function\" ? function(node, i, j) {\n node[ns][id].tween.set(name, tween(value.call(node, node.__data__, i, j)));\n } : (value = tween(value), function(node) {\n node[ns][id].tween.set(name, value);\n }));\n }\n d3_transitionPrototype.attr = function(nameNS, value) {\n if (arguments.length < 2) {\n for (value in nameNS) this.attr(value, nameNS[value]);\n return this;\n }\n var interpolate = nameNS == \"transform\" ? d3_interpolateTransform : d3_interpolate, name = d3.ns.qualify(nameNS);\n function attrNull() {\n this.removeAttribute(name);\n }\n function attrNullNS() {\n this.removeAttributeNS(name.space, name.local);\n }\n function attrTween(b) {\n return b == null ? attrNull : (b += \"\", function() {\n var a = this.getAttribute(name), i;\n return a !== b && (i = interpolate(a, b), function(t) {\n this.setAttribute(name, i(t));\n });\n });\n }\n function attrTweenNS(b) {\n return b == null ? attrNullNS : (b += \"\", function() {\n var a = this.getAttributeNS(name.space, name.local), i;\n return a !== b && (i = interpolate(a, b), function(t) {\n this.setAttributeNS(name.space, name.local, i(t));\n });\n });\n }\n return d3_transition_tween(this, \"attr.\" + nameNS, value, name.local ? attrTweenNS : attrTween);\n };\n d3_transitionPrototype.attrTween = function(nameNS, tween) {\n var name = d3.ns.qualify(nameNS);\n function attrTween(d, i) {\n var f = tween.call(this, d, i, this.getAttribute(name));\n return f && function(t) {\n this.setAttribute(name, f(t));\n };\n }\n function attrTweenNS(d, i) {\n var f = tween.call(this, d, i, this.getAttributeNS(name.space, name.local));\n return f && function(t) {\n this.setAttributeNS(name.space, name.local, f(t));\n };\n }\n return this.tween(\"attr.\" + nameNS, name.local ? attrTweenNS : attrTween);\n };\n d3_transitionPrototype.style = function(name, value, priority) {\n var n = arguments.length;\n if (n < 3) {\n if (typeof name !== \"string\") {\n if (n < 2) value = \"\";\n for (priority in name) this.style(priority, name[priority], value);\n return this;\n }\n priority = \"\";\n }\n function styleNull() {\n this.style.removeProperty(name);\n }\n function styleString(b) {\n return b == null ? styleNull : (b += \"\", function() {\n var a = d3_window(this).getComputedStyle(this, null).getPropertyValue(name), i;\n return a !== b && (i = d3_interpolate(a, b), function(t) {\n this.style.setProperty(name, i(t), priority);\n });\n });\n }\n return d3_transition_tween(this, \"style.\" + name, value, styleString);\n };\n d3_transitionPrototype.styleTween = function(name, tween, priority) {\n if (arguments.length < 3) priority = \"\";\n function styleTween(d, i) {\n var f = tween.call(this, d, i, d3_window(this).getComputedStyle(this, null).getPropertyValue(name));\n return f && function(t) {\n this.style.setProperty(name, f(t), priority);\n };\n }\n return this.tween(\"style.\" + name, styleTween);\n };\n d3_transitionPrototype.text = function(value) {\n return d3_transition_tween(this, \"text\", value, d3_transition_text);\n };\n function d3_transition_text(b) {\n if (b == null) b = \"\";\n return function() {\n this.textContent = b;\n };\n }\n d3_transitionPrototype.remove = function() {\n var ns = this.namespace;\n return this.each(\"end.transition\", function() {\n var p;\n if (this[ns].count < 2 && (p = this.parentNode)) p.removeChild(this);\n });\n };\n d3_transitionPrototype.ease = function(value) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 1) return this.node()[ns][id].ease;\n if (typeof value !== \"function\") value = d3.ease.apply(d3, arguments);\n return d3_selection_each(this, function(node) {\n node[ns][id].ease = value;\n });\n };\n d3_transitionPrototype.delay = function(value) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 1) return this.node()[ns][id].delay;\n return d3_selection_each(this, typeof value === \"function\" ? function(node, i, j) {\n node[ns][id].delay = +value.call(node, node.__data__, i, j);\n } : (value = +value, function(node) {\n node[ns][id].delay = value;\n }));\n };\n d3_transitionPrototype.duration = function(value) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 1) return this.node()[ns][id].duration;\n return d3_selection_each(this, typeof value === \"function\" ? function(node, i, j) {\n node[ns][id].duration = Math.max(1, value.call(node, node.__data__, i, j));\n } : (value = Math.max(1, value), function(node) {\n node[ns][id].duration = value;\n }));\n };\n d3_transitionPrototype.each = function(type, listener) {\n var id = this.id, ns = this.namespace;\n if (arguments.length < 2) {\n var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId;\n try {\n d3_transitionInheritId = id;\n d3_selection_each(this, function(node, i, j) {\n d3_transitionInherit = node[ns][id];\n type.call(node, node.__data__, i, j);\n });\n } finally {\n d3_transitionInherit = inherit;\n d3_transitionInheritId = inheritId;\n }\n } else {\n d3_selection_each(this, function(node) {\n var transition = node[ns][id];\n (transition.event || (transition.event = d3.dispatch(\"start\", \"end\", \"interrupt\"))).on(type, listener);\n });\n }\n return this;\n };\n d3_transitionPrototype.transition = function() {\n var id0 = this.id, id1 = ++d3_transitionId, ns = this.namespace, subgroups = [], subgroup, group, node, transition;\n for (var j = 0, m = this.length; j < m; j++) {\n subgroups.push(subgroup = []);\n for (var group = this[j], i = 0, n = group.length; i < n; i++) {\n if (node = group[i]) {\n transition = node[ns][id0];\n d3_transitionNode(node, i, ns, id1, {\n time: transition.time,\n ease: transition.ease,\n delay: transition.delay + transition.duration,\n duration: transition.duration\n });\n }\n subgroup.push(node);\n }\n }\n return d3_transition(subgroups, ns, id1);\n };\n function d3_transitionNamespace(name) {\n return name == null ? \"__transition__\" : \"__transition_\" + name + \"__\";\n }\n function d3_transitionNode(node, i, ns, id, inherit) {\n var lock = node[ns] || (node[ns] = {\n active: 0,\n count: 0\n }), transition = lock[id], time, timer, duration, ease, tweens;\n function schedule(elapsed) {\n var delay = transition.delay;\n timer.t = delay + time;\n if (delay <= elapsed) return start(elapsed - delay);\n timer.c = start;\n }\n function start(elapsed) {\n var activeId = lock.active, active = lock[activeId];\n if (active) {\n active.timer.c = null;\n active.timer.t = NaN;\n --lock.count;\n delete lock[activeId];\n active.event && active.event.interrupt.call(node, node.__data__, active.index);\n }\n for (var cancelId in lock) {\n if (+cancelId < id) {\n var cancel = lock[cancelId];\n cancel.timer.c = null;\n cancel.timer.t = NaN;\n --lock.count;\n delete lock[cancelId];\n }\n }\n timer.c = tick;\n d3_timer(function() {\n if (timer.c && tick(elapsed || 1)) {\n timer.c = null;\n timer.t = NaN;\n }\n return 1;\n }, 0, time);\n lock.active = id;\n transition.event && transition.event.start.call(node, node.__data__, i);\n tweens = [];\n transition.tween.forEach(function(key, value) {\n if (value = value.call(node, node.__data__, i)) {\n tweens.push(value);\n }\n });\n ease = transition.ease;\n duration = transition.duration;\n }\n function tick(elapsed) {\n var t = elapsed / duration, e = ease(t), n = tweens.length;\n while (n > 0) {\n tweens[--n].call(node, e);\n }\n if (t >= 1) {\n transition.event && transition.event.end.call(node, node.__data__, i);\n if (--lock.count) delete lock[id]; else delete node[ns];\n return 1;\n }\n }\n if (!transition) {\n time = inherit.time;\n timer = d3_timer(schedule, 0, time);\n transition = lock[id] = {\n tween: new d3_Map(),\n time: time,\n timer: timer,\n delay: inherit.delay,\n duration: inherit.duration,\n ease: inherit.ease,\n index: i\n };\n inherit = null;\n ++lock.count;\n }\n }\n d3.svg.axis = function() {\n var scale = d3.scale.linear(), orient = d3_svg_axisDefaultOrient, innerTickSize = 6, outerTickSize = 6, tickPadding = 3, tickArguments_ = [ 10 ], tickValues = null, tickFormat_;\n function axis(g) {\n g.each(function() {\n var g = d3.select(this);\n var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy();\n var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(\".tick\").data(ticks, scale1), tickEnter = tick.enter().insert(\"g\", \".domain\").attr(\"class\", \"tick\").style(\"opacity\", ε), tickExit = d3.transition(tick.exit()).style(\"opacity\", ε).remove(), tickUpdate = d3.transition(tick.order()).style(\"opacity\", 1), tickSpacing = Math.max(innerTickSize, 0) + tickPadding, tickTransform;\n var range = d3_scaleRange(scale1), path = g.selectAll(\".domain\").data([ 0 ]), pathUpdate = (path.enter().append(\"path\").attr(\"class\", \"domain\"), \n d3.transition(path));\n tickEnter.append(\"line\");\n tickEnter.append(\"text\");\n var lineEnter = tickEnter.select(\"line\"), lineUpdate = tickUpdate.select(\"line\"), text = tick.select(\"text\").text(tickFormat), textEnter = tickEnter.select(\"text\"), textUpdate = tickUpdate.select(\"text\"), sign = orient === \"top\" || orient === \"left\" ? -1 : 1, x1, x2, y1, y2;\n if (orient === \"bottom\" || orient === \"top\") {\n tickTransform = d3_svg_axisX, x1 = \"x\", y1 = \"y\", x2 = \"x2\", y2 = \"y2\";\n text.attr(\"dy\", sign < 0 ? \"0em\" : \".71em\").style(\"text-anchor\", \"middle\");\n pathUpdate.attr(\"d\", \"M\" + range[0] + \",\" + sign * outerTickSize + \"V0H\" + range[1] + \"V\" + sign * outerTickSize);\n } else {\n tickTransform = d3_svg_axisY, x1 = \"y\", y1 = \"x\", x2 = \"y2\", y2 = \"x2\";\n text.attr(\"dy\", \".32em\").style(\"text-anchor\", sign < 0 ? \"end\" : \"start\");\n pathUpdate.attr(\"d\", \"M\" + sign * outerTickSize + \",\" + range[0] + \"H0V\" + range[1] + \"H\" + sign * outerTickSize);\n }\n lineEnter.attr(y2, sign * innerTickSize);\n textEnter.attr(y1, sign * tickSpacing);\n lineUpdate.attr(x2, 0).attr(y2, sign * innerTickSize);\n textUpdate.attr(x1, 0).attr(y1, sign * tickSpacing);\n if (scale1.rangeBand) {\n var x = scale1, dx = x.rangeBand() / 2;\n scale0 = scale1 = function(d) {\n return x(d) + dx;\n };\n } else if (scale0.rangeBand) {\n scale0 = scale1;\n } else {\n tickExit.call(tickTransform, scale1, scale0);\n }\n tickEnter.call(tickTransform, scale0, scale1);\n tickUpdate.call(tickTransform, scale1, scale1);\n });\n }\n axis.scale = function(x) {\n if (!arguments.length) return scale;\n scale = x;\n return axis;\n };\n axis.orient = function(x) {\n if (!arguments.length) return orient;\n orient = x in d3_svg_axisOrients ? x + \"\" : d3_svg_axisDefaultOrient;\n return axis;\n };\n axis.ticks = function() {\n if (!arguments.length) return tickArguments_;\n tickArguments_ = d3_array(arguments);\n return axis;\n };\n axis.tickValues = function(x) {\n if (!arguments.length) return tickValues;\n tickValues = x;\n return axis;\n };\n axis.tickFormat = function(x) {\n if (!arguments.length) return tickFormat_;\n tickFormat_ = x;\n return axis;\n };\n axis.tickSize = function(x) {\n var n = arguments.length;\n if (!n) return innerTickSize;\n innerTickSize = +x;\n outerTickSize = +arguments[n - 1];\n return axis;\n };\n axis.innerTickSize = function(x) {\n if (!arguments.length) return innerTickSize;\n innerTickSize = +x;\n return axis;\n };\n axis.outerTickSize = function(x) {\n if (!arguments.length) return outerTickSize;\n outerTickSize = +x;\n return axis;\n };\n axis.tickPadding = function(x) {\n if (!arguments.length) return tickPadding;\n tickPadding = +x;\n return axis;\n };\n axis.tickSubdivide = function() {\n return arguments.length && axis;\n };\n return axis;\n };\n var d3_svg_axisDefaultOrient = \"bottom\", d3_svg_axisOrients = {\n top: 1,\n right: 1,\n bottom: 1,\n left: 1\n };\n function d3_svg_axisX(selection, x0, x1) {\n selection.attr(\"transform\", function(d) {\n var v0 = x0(d);\n return \"translate(\" + (isFinite(v0) ? v0 : x1(d)) + \",0)\";\n });\n }\n function d3_svg_axisY(selection, y0, y1) {\n selection.attr(\"transform\", function(d) {\n var v0 = y0(d);\n return \"translate(0,\" + (isFinite(v0) ? v0 : y1(d)) + \")\";\n });\n }\n d3.svg.brush = function() {\n var event = d3_eventDispatch(brush, \"brushstart\", \"brush\", \"brushend\"), x = null, y = null, xExtent = [ 0, 0 ], yExtent = [ 0, 0 ], xExtentDomain, yExtentDomain, xClamp = true, yClamp = true, resizes = d3_svg_brushResizes[0];\n function brush(g) {\n g.each(function() {\n var g = d3.select(this).style(\"pointer-events\", \"all\").style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\").on(\"mousedown.brush\", brushstart).on(\"touchstart.brush\", brushstart);\n var background = g.selectAll(\".background\").data([ 0 ]);\n background.enter().append(\"rect\").attr(\"class\", \"background\").style(\"visibility\", \"hidden\").style(\"cursor\", \"crosshair\");\n g.selectAll(\".extent\").data([ 0 ]).enter().append(\"rect\").attr(\"class\", \"extent\").style(\"cursor\", \"move\");\n var resize = g.selectAll(\".resize\").data(resizes, d3_identity);\n resize.exit().remove();\n resize.enter().append(\"g\").attr(\"class\", function(d) {\n return \"resize \" + d;\n }).style(\"cursor\", function(d) {\n return d3_svg_brushCursor[d];\n }).append(\"rect\").attr(\"x\", function(d) {\n return /[ew]$/.test(d) ? -3 : null;\n }).attr(\"y\", function(d) {\n return /^[ns]/.test(d) ? -3 : null;\n }).attr(\"width\", 6).attr(\"height\", 6).style(\"visibility\", \"hidden\");\n resize.style(\"display\", brush.empty() ? \"none\" : null);\n var gUpdate = d3.transition(g), backgroundUpdate = d3.transition(background), range;\n if (x) {\n range = d3_scaleRange(x);\n backgroundUpdate.attr(\"x\", range[0]).attr(\"width\", range[1] - range[0]);\n redrawX(gUpdate);\n }\n if (y) {\n range = d3_scaleRange(y);\n backgroundUpdate.attr(\"y\", range[0]).attr(\"height\", range[1] - range[0]);\n redrawY(gUpdate);\n }\n redraw(gUpdate);\n });\n }\n brush.event = function(g) {\n g.each(function() {\n var event_ = event.of(this, arguments), extent1 = {\n x: xExtent,\n y: yExtent,\n i: xExtentDomain,\n j: yExtentDomain\n }, extent0 = this.__chart__ || extent1;\n this.__chart__ = extent1;\n if (d3_transitionInheritId) {\n d3.select(this).transition().each(\"start.brush\", function() {\n xExtentDomain = extent0.i;\n yExtentDomain = extent0.j;\n xExtent = extent0.x;\n yExtent = extent0.y;\n event_({\n type: \"brushstart\"\n });\n }).tween(\"brush:brush\", function() {\n var xi = d3_interpolateArray(xExtent, extent1.x), yi = d3_interpolateArray(yExtent, extent1.y);\n xExtentDomain = yExtentDomain = null;\n return function(t) {\n xExtent = extent1.x = xi(t);\n yExtent = extent1.y = yi(t);\n event_({\n type: \"brush\",\n mode: \"resize\"\n });\n };\n }).each(\"end.brush\", function() {\n xExtentDomain = extent1.i;\n yExtentDomain = extent1.j;\n event_({\n type: \"brush\",\n mode: \"resize\"\n });\n event_({\n type: \"brushend\"\n });\n });\n } else {\n event_({\n type: \"brushstart\"\n });\n event_({\n type: \"brush\",\n mode: \"resize\"\n });\n event_({\n type: \"brushend\"\n });\n }\n });\n };\n function redraw(g) {\n g.selectAll(\".resize\").attr(\"transform\", function(d) {\n return \"translate(\" + xExtent[+/e$/.test(d)] + \",\" + yExtent[+/^s/.test(d)] + \")\";\n });\n }\n function redrawX(g) {\n g.select(\".extent\").attr(\"x\", xExtent[0]);\n g.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\", xExtent[1] - xExtent[0]);\n }\n function redrawY(g) {\n g.select(\".extent\").attr(\"y\", yExtent[0]);\n g.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\", yExtent[1] - yExtent[0]);\n }\n function brushstart() {\n var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed(\"extent\"), dragRestore = d3_event_dragSuppress(target), center, origin = d3.mouse(target), offset;\n var w = d3.select(d3_window(target)).on(\"keydown.brush\", keydown).on(\"keyup.brush\", keyup);\n if (d3.event.changedTouches) {\n w.on(\"touchmove.brush\", brushmove).on(\"touchend.brush\", brushend);\n } else {\n w.on(\"mousemove.brush\", brushmove).on(\"mouseup.brush\", brushend);\n }\n g.interrupt().selectAll(\"*\").interrupt();\n if (dragging) {\n origin[0] = xExtent[0] - origin[0];\n origin[1] = yExtent[0] - origin[1];\n } else if (resizing) {\n var ex = +/w$/.test(resizing), ey = +/^n/.test(resizing);\n offset = [ xExtent[1 - ex] - origin[0], yExtent[1 - ey] - origin[1] ];\n origin[0] = xExtent[ex];\n origin[1] = yExtent[ey];\n } else if (d3.event.altKey) center = origin.slice();\n g.style(\"pointer-events\", \"none\").selectAll(\".resize\").style(\"display\", null);\n d3.select(\"body\").style(\"cursor\", eventTarget.style(\"cursor\"));\n event_({\n type: \"brushstart\"\n });\n brushmove();\n function keydown() {\n if (d3.event.keyCode == 32) {\n if (!dragging) {\n center = null;\n origin[0] -= xExtent[1];\n origin[1] -= yExtent[1];\n dragging = 2;\n }\n d3_eventPreventDefault();\n }\n }\n function keyup() {\n if (d3.event.keyCode == 32 && dragging == 2) {\n origin[0] += xExtent[1];\n origin[1] += yExtent[1];\n dragging = 0;\n d3_eventPreventDefault();\n }\n }\n function brushmove() {\n var point = d3.mouse(target), moved = false;\n if (offset) {\n point[0] += offset[0];\n point[1] += offset[1];\n }\n if (!dragging) {\n if (d3.event.altKey) {\n if (!center) center = [ (xExtent[0] + xExtent[1]) / 2, (yExtent[0] + yExtent[1]) / 2 ];\n origin[0] = xExtent[+(point[0] < center[0])];\n origin[1] = yExtent[+(point[1] < center[1])];\n } else center = null;\n }\n if (resizingX && move1(point, x, 0)) {\n redrawX(g);\n moved = true;\n }\n if (resizingY && move1(point, y, 1)) {\n redrawY(g);\n moved = true;\n }\n if (moved) {\n redraw(g);\n event_({\n type: \"brush\",\n mode: dragging ? \"move\" : \"resize\"\n });\n }\n }\n function move1(point, scale, i) {\n var range = d3_scaleRange(scale), r0 = range[0], r1 = range[1], position = origin[i], extent = i ? yExtent : xExtent, size = extent[1] - extent[0], min, max;\n if (dragging) {\n r0 -= position;\n r1 -= size + position;\n }\n min = (i ? yClamp : xClamp) ? Math.max(r0, Math.min(r1, point[i])) : point[i];\n if (dragging) {\n max = (min += position) + size;\n } else {\n if (center) position = Math.max(r0, Math.min(r1, 2 * center[i] - min));\n if (position < min) {\n max = min;\n min = position;\n } else {\n max = position;\n }\n }\n if (extent[0] != min || extent[1] != max) {\n if (i) yExtentDomain = null; else xExtentDomain = null;\n extent[0] = min;\n extent[1] = max;\n return true;\n }\n }\n function brushend() {\n brushmove();\n g.style(\"pointer-events\", \"all\").selectAll(\".resize\").style(\"display\", brush.empty() ? \"none\" : null);\n d3.select(\"body\").style(\"cursor\", null);\n w.on(\"mousemove.brush\", null).on(\"mouseup.brush\", null).on(\"touchmove.brush\", null).on(\"touchend.brush\", null).on(\"keydown.brush\", null).on(\"keyup.brush\", null);\n dragRestore();\n event_({\n type: \"brushend\"\n });\n }\n }\n brush.x = function(z) {\n if (!arguments.length) return x;\n x = z;\n resizes = d3_svg_brushResizes[!x << 1 | !y];\n return brush;\n };\n brush.y = function(z) {\n if (!arguments.length) return y;\n y = z;\n resizes = d3_svg_brushResizes[!x << 1 | !y];\n return brush;\n };\n brush.clamp = function(z) {\n if (!arguments.length) return x && y ? [ xClamp, yClamp ] : x ? xClamp : y ? yClamp : null;\n if (x && y) xClamp = !!z[0], yClamp = !!z[1]; else if (x) xClamp = !!z; else if (y) yClamp = !!z;\n return brush;\n };\n brush.extent = function(z) {\n var x0, x1, y0, y1, t;\n if (!arguments.length) {\n if (x) {\n if (xExtentDomain) {\n x0 = xExtentDomain[0], x1 = xExtentDomain[1];\n } else {\n x0 = xExtent[0], x1 = xExtent[1];\n if (x.invert) x0 = x.invert(x0), x1 = x.invert(x1);\n if (x1 < x0) t = x0, x0 = x1, x1 = t;\n }\n }\n if (y) {\n if (yExtentDomain) {\n y0 = yExtentDomain[0], y1 = yExtentDomain[1];\n } else {\n y0 = yExtent[0], y1 = yExtent[1];\n if (y.invert) y0 = y.invert(y0), y1 = y.invert(y1);\n if (y1 < y0) t = y0, y0 = y1, y1 = t;\n }\n }\n return x && y ? [ [ x0, y0 ], [ x1, y1 ] ] : x ? [ x0, x1 ] : y && [ y0, y1 ];\n }\n if (x) {\n x0 = z[0], x1 = z[1];\n if (y) x0 = x0[0], x1 = x1[0];\n xExtentDomain = [ x0, x1 ];\n if (x.invert) x0 = x(x0), x1 = x(x1);\n if (x1 < x0) t = x0, x0 = x1, x1 = t;\n if (x0 != xExtent[0] || x1 != xExtent[1]) xExtent = [ x0, x1 ];\n }\n if (y) {\n y0 = z[0], y1 = z[1];\n if (x) y0 = y0[1], y1 = y1[1];\n yExtentDomain = [ y0, y1 ];\n if (y.invert) y0 = y(y0), y1 = y(y1);\n if (y1 < y0) t = y0, y0 = y1, y1 = t;\n if (y0 != yExtent[0] || y1 != yExtent[1]) yExtent = [ y0, y1 ];\n }\n return brush;\n };\n brush.clear = function() {\n if (!brush.empty()) {\n xExtent = [ 0, 0 ], yExtent = [ 0, 0 ];\n xExtentDomain = yExtentDomain = null;\n }\n return brush;\n };\n brush.empty = function() {\n return !!x && xExtent[0] == xExtent[1] || !!y && yExtent[0] == yExtent[1];\n };\n return d3.rebind(brush, event, \"on\");\n };\n var d3_svg_brushCursor = {\n n: \"ns-resize\",\n e: \"ew-resize\",\n s: \"ns-resize\",\n w: \"ew-resize\",\n nw: \"nwse-resize\",\n ne: \"nesw-resize\",\n se: \"nwse-resize\",\n sw: \"nesw-resize\"\n };\n var d3_svg_brushResizes = [ [ \"n\", \"e\", \"s\", \"w\", \"nw\", \"ne\", \"se\", \"sw\" ], [ \"e\", \"w\" ], [ \"n\", \"s\" ], [] ];\n var d3_time_format = d3_time.format = d3_locale_enUS.timeFormat;\n var d3_time_formatUtc = d3_time_format.utc;\n var d3_time_formatIso = d3_time_formatUtc(\"%Y-%m-%dT%H:%M:%S.%LZ\");\n d3_time_format.iso = Date.prototype.toISOString && +new Date(\"2000-01-01T00:00:00.000Z\") ? d3_time_formatIsoNative : d3_time_formatIso;\n function d3_time_formatIsoNative(date) {\n return date.toISOString();\n }\n d3_time_formatIsoNative.parse = function(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n };\n d3_time_formatIsoNative.toString = d3_time_formatIso.toString;\n d3_time.second = d3_time_interval(function(date) {\n return new d3_date(Math.floor(date / 1e3) * 1e3);\n }, function(date, offset) {\n date.setTime(date.getTime() + Math.floor(offset) * 1e3);\n }, function(date) {\n return date.getSeconds();\n });\n d3_time.seconds = d3_time.second.range;\n d3_time.seconds.utc = d3_time.second.utc.range;\n d3_time.minute = d3_time_interval(function(date) {\n return new d3_date(Math.floor(date / 6e4) * 6e4);\n }, function(date, offset) {\n date.setTime(date.getTime() + Math.floor(offset) * 6e4);\n }, function(date) {\n return date.getMinutes();\n });\n d3_time.minutes = d3_time.minute.range;\n d3_time.minutes.utc = d3_time.minute.utc.range;\n d3_time.hour = d3_time_interval(function(date) {\n var timezone = date.getTimezoneOffset() / 60;\n return new d3_date((Math.floor(date / 36e5 - timezone) + timezone) * 36e5);\n }, function(date, offset) {\n date.setTime(date.getTime() + Math.floor(offset) * 36e5);\n }, function(date) {\n return date.getHours();\n });\n d3_time.hours = d3_time.hour.range;\n d3_time.hours.utc = d3_time.hour.utc.range;\n d3_time.month = d3_time_interval(function(date) {\n date = d3_time.day(date);\n date.setDate(1);\n return date;\n }, function(date, offset) {\n date.setMonth(date.getMonth() + offset);\n }, function(date) {\n return date.getMonth();\n });\n d3_time.months = d3_time.month.range;\n d3_time.months.utc = d3_time.month.utc.range;\n function d3_time_scale(linear, methods, format) {\n function scale(x) {\n return linear(x);\n }\n scale.invert = function(x) {\n return d3_time_scaleDate(linear.invert(x));\n };\n scale.domain = function(x) {\n if (!arguments.length) return linear.domain().map(d3_time_scaleDate);\n linear.domain(x);\n return scale;\n };\n function tickMethod(extent, count) {\n var span = extent[1] - extent[0], target = span / count, i = d3.bisect(d3_time_scaleSteps, target);\n return i == d3_time_scaleSteps.length ? [ methods.year, d3_scale_linearTickRange(extent.map(function(d) {\n return d / 31536e6;\n }), count)[2] ] : !i ? [ d3_time_scaleMilliseconds, d3_scale_linearTickRange(extent, count)[2] ] : methods[target / d3_time_scaleSteps[i - 1] < d3_time_scaleSteps[i] / target ? i - 1 : i];\n }\n scale.nice = function(interval, skip) {\n var domain = scale.domain(), extent = d3_scaleExtent(domain), method = interval == null ? tickMethod(extent, 10) : typeof interval === \"number\" && tickMethod(extent, interval);\n if (method) interval = method[0], skip = method[1];\n function skipped(date) {\n return !isNaN(date) && !interval.range(date, d3_time_scaleDate(+date + 1), skip).length;\n }\n return scale.domain(d3_scale_nice(domain, skip > 1 ? {\n floor: function(date) {\n while (skipped(date = interval.floor(date))) date = d3_time_scaleDate(date - 1);\n return date;\n },\n ceil: function(date) {\n while (skipped(date = interval.ceil(date))) date = d3_time_scaleDate(+date + 1);\n return date;\n }\n } : interval));\n };\n scale.ticks = function(interval, skip) {\n var extent = d3_scaleExtent(scale.domain()), method = interval == null ? tickMethod(extent, 10) : typeof interval === \"number\" ? tickMethod(extent, interval) : !interval.range && [ {\n range: interval\n }, skip ];\n if (method) interval = method[0], skip = method[1];\n return interval.range(extent[0], d3_time_scaleDate(+extent[1] + 1), skip < 1 ? 1 : skip);\n };\n scale.tickFormat = function() {\n return format;\n };\n scale.copy = function() {\n return d3_time_scale(linear.copy(), methods, format);\n };\n return d3_scale_linearRebind(scale, linear);\n }\n function d3_time_scaleDate(t) {\n return new Date(t);\n }\n var d3_time_scaleSteps = [ 1e3, 5e3, 15e3, 3e4, 6e4, 3e5, 9e5, 18e5, 36e5, 108e5, 216e5, 432e5, 864e5, 1728e5, 6048e5, 2592e6, 7776e6, 31536e6 ];\n var d3_time_scaleLocalMethods = [ [ d3_time.second, 1 ], [ d3_time.second, 5 ], [ d3_time.second, 15 ], [ d3_time.second, 30 ], [ d3_time.minute, 1 ], [ d3_time.minute, 5 ], [ d3_time.minute, 15 ], [ d3_time.minute, 30 ], [ d3_time.hour, 1 ], [ d3_time.hour, 3 ], [ d3_time.hour, 6 ], [ d3_time.hour, 12 ], [ d3_time.day, 1 ], [ d3_time.day, 2 ], [ d3_time.week, 1 ], [ d3_time.month, 1 ], [ d3_time.month, 3 ], [ d3_time.year, 1 ] ];\n var d3_time_scaleLocalFormat = d3_time_format.multi([ [ \".%L\", function(d) {\n return d.getMilliseconds();\n } ], [ \":%S\", function(d) {\n return d.getSeconds();\n } ], [ \"%I:%M\", function(d) {\n return d.getMinutes();\n } ], [ \"%I %p\", function(d) {\n return d.getHours();\n } ], [ \"%a %d\", function(d) {\n return d.getDay() && d.getDate() != 1;\n } ], [ \"%b %d\", function(d) {\n return d.getDate() != 1;\n } ], [ \"%B\", function(d) {\n return d.getMonth();\n } ], [ \"%Y\", d3_true ] ]);\n var d3_time_scaleMilliseconds = {\n range: function(start, stop, step) {\n return d3.range(Math.ceil(start / step) * step, +stop, step).map(d3_time_scaleDate);\n },\n floor: d3_identity,\n ceil: d3_identity\n };\n d3_time_scaleLocalMethods.year = d3_time.year;\n d3_time.scale = function() {\n return d3_time_scale(d3.scale.linear(), d3_time_scaleLocalMethods, d3_time_scaleLocalFormat);\n };\n var d3_time_scaleUtcMethods = d3_time_scaleLocalMethods.map(function(m) {\n return [ m[0].utc, m[1] ];\n });\n var d3_time_scaleUtcFormat = d3_time_formatUtc.multi([ [ \".%L\", function(d) {\n return d.getUTCMilliseconds();\n } ], [ \":%S\", function(d) {\n return d.getUTCSeconds();\n } ], [ \"%I:%M\", function(d) {\n return d.getUTCMinutes();\n } ], [ \"%I %p\", function(d) {\n return d.getUTCHours();\n } ], [ \"%a %d\", function(d) {\n return d.getUTCDay() && d.getUTCDate() != 1;\n } ], [ \"%b %d\", function(d) {\n return d.getUTCDate() != 1;\n } ], [ \"%B\", function(d) {\n return d.getUTCMonth();\n } ], [ \"%Y\", d3_true ] ]);\n d3_time_scaleUtcMethods.year = d3_time.year.utc;\n d3_time.scale.utc = function() {\n return d3_time_scale(d3.scale.linear(), d3_time_scaleUtcMethods, d3_time_scaleUtcFormat);\n };\n d3.text = d3_xhrType(function(request) {\n return request.responseText;\n });\n d3.json = function(url, callback) {\n return d3_xhr(url, \"application/json\", d3_json, callback);\n };\n function d3_json(request) {\n return JSON.parse(request.responseText);\n }\n d3.html = function(url, callback) {\n return d3_xhr(url, \"text/html\", d3_html, callback);\n };\n function d3_html(request) {\n var range = d3_document.createRange();\n range.selectNode(d3_document.body);\n return range.createContextualFragment(request.responseText);\n }\n d3.xml = d3_xhrType(function(request) {\n return request.responseXML;\n });\n if (typeof define === \"function\" && define.amd) this.d3 = d3, define(d3); else if (typeof module === \"object\" && module.exports) module.exports = d3; else this.d3 = d3;\n}();"],"sourceRoot":""}
|