diff --git a/auxdir/CFIS/tiles_202510/tiles_P1.txt b/auxdir/CFIS/tiles_202510/tiles_P1.txt new file mode 100644 index 00000000..fbf9a7f4 --- /dev/null +++ b/auxdir/CFIS/tiles_202510/tiles_P1.txt @@ -0,0 +1,3527 @@ +110.299 +111.298 +111.299 +112.297 +112.298 +112.299 +113.296 +113.297 +113.298 +113.299 +114.296 +114.297 +114.298 +114.299 +115.295 +115.296 +115.297 +115.298 +115.299 +116.295 +116.296 +116.297 +116.298 +116.299 +117.294 +117.295 +117.296 +117.297 +117.298 +117.299 +118.293 +118.294 +118.295 +118.296 +118.297 +118.298 +118.299 +119.293 +119.294 +119.295 +119.296 +119.297 +119.298 +119.299 +120.292 +120.293 +120.294 +120.295 +120.296 +120.297 +120.298 +120.299 +121.292 +121.293 +121.294 +121.295 +121.296 +121.297 +121.298 +121.299 +122.291 +122.292 +122.293 +122.294 +122.295 +122.296 +122.297 +122.298 +122.299 +123.290 +123.291 +123.292 +123.293 +123.294 +123.295 +123.296 +123.297 +123.298 +123.299 +124.289 +124.290 +124.291 +124.292 +124.293 +124.294 +124.295 +124.296 +124.297 +124.298 +124.299 +125.289 +125.290 +125.291 +125.292 +125.293 +125.294 +125.295 +125.296 +125.297 +125.298 +125.299 +126.288 +126.289 +126.290 +126.291 +126.292 +126.293 +126.294 +126.295 +126.296 +126.297 +126.298 +126.299 +127.287 +127.288 +127.289 +127.290 +127.291 +127.292 +127.293 +127.294 +127.295 +127.296 +127.297 +127.298 +127.299 +128.287 +128.288 +128.289 +128.290 +128.291 +128.292 +128.293 +128.294 +128.295 +128.296 +128.297 +128.298 +129.286 +129.287 +129.288 +129.289 +129.290 +129.291 +129.292 +129.293 +129.294 +129.295 +129.296 +129.297 +129.298 +129.299 +130.285 +130.286 +130.287 +130.288 +130.289 +130.290 +130.291 +130.292 +130.293 +130.294 +130.295 +130.296 +130.297 +130.298 +130.299 +131.285 +131.286 +131.287 +131.288 +131.289 +131.290 +131.291 +131.292 +131.293 +131.294 +131.295 +131.296 +131.297 +131.298 +131.299 +132.285 +132.286 +132.287 +132.288 +132.289 +132.290 +132.291 +132.292 +132.293 +132.294 +132.295 +132.296 +132.297 +132.298 +132.299 +133.284 +133.285 +133.286 +133.287 +133.288 +133.289 +133.290 +133.291 +133.292 +133.293 +133.294 +133.295 +133.296 +133.297 +133.298 +133.299 +134.283 +134.284 +134.285 +134.286 +134.287 +134.288 +134.289 +134.290 +134.291 +134.292 +134.293 +134.294 +134.295 +134.296 +134.297 +134.298 +134.299 +135.283 +135.284 +135.285 +135.286 +135.287 +135.288 +135.289 +135.290 +135.291 +135.292 +135.293 +135.294 +135.295 +135.296 +135.297 +135.298 +135.299 +136.282 +136.283 +136.284 +136.285 +136.286 +136.287 +136.288 +136.289 +136.290 +136.291 +136.292 +136.293 +136.294 +136.295 +136.296 +136.297 +136.298 +136.299 +137.282 +137.283 +137.284 +137.285 +137.286 +137.287 +137.288 +137.289 +137.290 +137.291 +137.292 +137.293 +137.294 +137.295 +137.296 +137.297 +137.298 +137.299 +138.281 +138.282 +138.283 +138.284 +138.285 +138.286 +138.287 +138.288 +138.289 +138.290 +138.291 +138.292 +138.293 +138.294 +138.295 +138.296 +138.297 +138.298 +139.281 +139.282 +139.283 +139.284 +139.285 +139.286 +139.287 +139.288 +139.289 +139.290 +139.291 +139.292 +139.293 +139.294 +139.295 +139.296 +139.297 +139.298 +140.280 +140.281 +140.282 +140.283 +140.284 +140.285 +140.286 +140.287 +140.288 +140.289 +140.290 +140.291 +140.292 +140.293 +140.294 +140.295 +140.296 +140.297 +141.280 +141.281 +141.282 +141.283 +141.284 +141.285 +141.286 +141.287 +141.288 +141.289 +141.290 +141.291 +141.292 +141.293 +141.294 +141.295 +141.296 +141.297 +142.279 +142.280 +142.281 +142.282 +142.283 +142.284 +142.285 +142.286 +142.287 +142.288 +142.289 +142.290 +142.291 +142.292 +142.293 +142.294 +142.295 +142.296 +143.278 +143.279 +143.280 +143.281 +143.282 +143.283 +143.284 +143.285 +143.286 +143.287 +143.288 +143.289 +143.290 +143.291 +143.292 +143.293 +143.294 +143.295 +144.278 +144.279 +144.280 +144.281 +144.282 +144.283 +144.284 +144.285 +144.286 +144.287 +144.288 +144.289 +144.290 +144.291 +144.292 +144.293 +144.294 +144.295 +145.277 +145.278 +145.279 +145.280 +145.281 +145.282 +145.283 +145.284 +145.285 +145.286 +145.287 +145.288 +145.289 +145.290 +145.291 +145.292 +145.293 +145.294 +146.277 +146.278 +146.279 +146.280 +146.281 +146.282 +146.283 +146.284 +146.285 +146.286 +146.287 +146.288 +146.289 +146.290 +146.291 +146.292 +146.293 +147.276 +147.277 +147.278 +147.279 +147.280 +147.281 +147.282 +147.283 +147.284 +147.285 +147.286 +147.287 +147.288 +147.289 +147.290 +147.291 +147.292 +148.276 +148.277 +148.278 +148.279 +148.280 +148.281 +148.282 +148.283 +148.284 +148.285 +148.286 +148.287 +148.288 +148.289 +148.290 +148.291 +148.292 +149.276 +149.277 +149.278 +149.279 +149.280 +149.281 +149.282 +149.283 +149.284 +149.285 +149.286 +149.287 +149.288 +149.289 +149.290 +149.291 +149.292 +150.275 +150.276 +150.277 +150.278 +150.279 +150.280 +150.281 +150.282 +150.283 +150.284 +150.285 +150.286 +150.287 +150.288 +150.289 +150.290 +150.291 +151.274 +151.275 +151.276 +151.277 +151.278 +151.279 +151.280 +151.281 +151.282 +151.283 +151.284 +151.285 +151.286 +151.287 +151.288 +151.289 +151.290 +151.291 +152.273 +152.274 +152.275 +152.276 +152.277 +152.278 +152.279 +152.280 +152.281 +152.282 +152.283 +152.284 +152.285 +152.286 +152.287 +152.288 +152.289 +152.290 +153.273 +153.274 +153.275 +153.276 +153.277 +153.278 +153.279 +153.280 +153.281 +153.282 +153.283 +153.284 +153.285 +153.286 +153.287 +153.288 +153.289 +154.272 +154.273 +154.274 +154.275 +154.276 +154.277 +154.278 +154.279 +154.280 +154.281 +154.282 +154.283 +154.284 +154.285 +154.286 +154.287 +154.288 +155.271 +155.272 +155.273 +155.274 +155.275 +155.276 +155.277 +155.278 +155.279 +155.280 +155.281 +155.282 +155.283 +155.284 +155.285 +155.286 +155.287 +156.270 +156.271 +156.272 +156.273 +156.274 +156.275 +156.276 +156.277 +156.278 +156.279 +156.280 +156.281 +156.282 +156.283 +156.284 +156.285 +156.286 +156.287 +157.270 +157.271 +157.272 +157.273 +157.274 +157.275 +157.276 +157.277 +157.278 +157.279 +157.280 +157.281 +157.282 +157.283 +157.284 +157.285 +157.286 +157.287 +158.270 +158.271 +158.272 +158.273 +158.274 +158.275 +158.276 +158.277 +158.278 +158.279 +158.280 +158.281 +158.282 +158.283 +158.284 +158.285 +158.286 +159.269 +159.270 +159.271 +159.272 +159.273 +159.274 +159.275 +159.276 +159.277 +159.278 +159.279 +159.280 +159.281 +159.282 +159.283 +159.284 +159.285 +159.286 +160.268 +160.269 +160.270 +160.271 +160.272 +160.273 +160.274 +160.275 +160.276 +160.277 +160.278 +160.279 +160.280 +160.281 +160.282 +160.283 +160.284 +160.285 +161.267 +161.268 +161.269 +161.270 +161.271 +161.272 +161.273 +161.274 +161.275 +161.276 +161.277 +161.278 +161.279 +161.280 +161.281 +161.282 +161.283 +161.284 +161.285 +162.266 +162.267 +162.268 +162.269 +162.270 +162.271 +162.272 +162.273 +162.274 +162.275 +162.276 +162.277 +162.278 +162.279 +162.280 +162.281 +162.282 +162.283 +162.284 +163.266 +163.267 +163.268 +163.269 +163.270 +163.271 +163.272 +163.273 +163.274 +163.275 +163.276 +163.277 +163.278 +163.279 +163.280 +163.281 +163.282 +163.283 +164.266 +164.267 +164.268 +164.269 +164.270 +164.271 +164.272 +164.273 +164.274 +164.275 +164.276 +164.277 +164.278 +164.279 +164.280 +164.281 +164.282 +164.283 +165.265 +165.266 +165.267 +165.268 +165.269 +165.270 +165.271 +165.272 +165.273 +165.274 +165.275 +165.276 +165.277 +165.278 +165.279 +165.280 +165.281 +165.282 +166.264 +166.265 +166.266 +166.267 +166.268 +166.269 +166.270 +166.271 +166.272 +166.273 +166.274 +166.275 +166.276 +166.277 +166.278 +166.279 +166.280 +166.281 +166.282 +167.263 +167.264 +167.265 +167.266 +167.267 +167.268 +167.269 +167.270 +167.271 +167.272 +167.273 +167.274 +167.275 +167.276 +167.277 +167.278 +167.279 +167.280 +167.281 +168.263 +168.264 +168.265 +168.266 +168.267 +168.268 +168.269 +168.270 +168.271 +168.272 +168.273 +168.274 +168.275 +168.276 +168.277 +168.278 +168.279 +168.280 +168.281 +169.262 +169.263 +169.264 +169.265 +169.266 +169.267 +169.268 +169.269 +169.270 +169.271 +169.272 +169.273 +169.274 +169.275 +169.276 +169.277 +169.278 +169.279 +169.280 +170.262 +170.263 +170.264 +170.265 +170.266 +170.267 +170.268 +170.269 +170.270 +170.271 +170.272 +170.273 +170.274 +170.275 +170.276 +170.277 +170.278 +170.279 +171.261 +171.262 +171.263 +171.264 +171.265 +171.266 +171.267 +171.268 +171.269 +171.270 +171.271 +171.272 +171.273 +171.274 +171.275 +171.276 +171.277 +171.278 +171.279 +172.260 +172.261 +172.262 +172.263 +172.264 +172.265 +172.266 +172.267 +172.268 +172.269 +172.270 +172.271 +172.272 +172.273 +172.274 +172.275 +172.276 +172.277 +172.278 +172.279 +173.259 +173.260 +173.261 +173.262 +173.263 +173.264 +173.265 +173.266 +173.267 +173.268 +173.269 +173.270 +173.271 +173.272 +173.273 +173.274 +173.275 +173.276 +173.277 +173.278 +173.279 +174.259 +174.260 +174.261 +174.262 +174.263 +174.264 +174.265 +174.266 +174.267 +174.268 +174.269 +174.270 +174.271 +174.272 +174.273 +174.274 +174.275 +174.276 +174.277 +174.278 +174.279 +175.258 +175.259 +175.260 +175.261 +175.262 +175.263 +175.264 +175.265 +175.266 +175.267 +175.268 +175.269 +175.270 +175.271 +175.272 +175.273 +175.274 +175.275 +175.276 +175.277 +175.278 +175.279 +176.258 +176.259 +176.260 +176.261 +176.262 +176.263 +176.264 +176.265 +176.266 +176.267 +176.268 +176.269 +176.270 +176.271 +176.272 +176.273 +176.274 +176.275 +176.276 +176.277 +176.278 +176.279 +177.257 +177.258 +177.259 +177.260 +177.261 +177.262 +177.263 +177.264 +177.265 +177.266 +177.267 +177.268 +177.269 +177.270 +177.271 +177.272 +177.273 +177.274 +177.275 +177.276 +177.277 +177.278 +177.279 +178.257 +178.258 +178.259 +178.260 +178.261 +178.262 +178.263 +178.264 +178.265 +178.266 +178.267 +178.268 +178.269 +178.270 +178.271 +178.272 +178.273 +178.274 +178.275 +178.276 +178.277 +178.278 +178.279 +179.256 +179.257 +179.258 +179.259 +179.260 +179.261 +179.262 +179.263 +179.264 +179.265 +179.266 +179.267 +179.268 +179.269 +179.270 +179.271 +179.272 +179.273 +179.274 +179.275 +179.276 +179.277 +179.278 +179.279 +180.255 +180.256 +180.257 +180.258 +180.259 +180.260 +180.261 +180.262 +180.263 +180.264 +180.265 +180.266 +180.267 +180.268 +180.269 +180.270 +180.271 +180.272 +180.273 +180.274 +180.275 +180.276 +180.277 +180.278 +180.279 +181.254 +181.255 +181.256 +181.257 +181.258 +181.259 +181.260 +181.261 +181.262 +181.263 +181.264 +181.265 +181.266 +181.267 +181.268 +181.269 +181.270 +181.271 +181.272 +181.273 +181.274 +181.275 +181.276 +181.277 +181.278 +181.279 +182.253 +182.254 +182.255 +182.256 +182.257 +182.258 +182.259 +182.260 +182.261 +182.262 +182.263 +182.264 +182.265 +182.266 +182.267 +182.268 +182.269 +182.270 +182.271 +182.272 +182.273 +182.274 +182.275 +182.276 +182.277 +182.278 +182.279 +183.252 +183.253 +183.254 +183.255 +183.256 +183.257 +183.258 +183.259 +183.260 +183.261 +183.262 +183.263 +183.264 +183.265 +183.266 +183.267 +183.268 +183.269 +183.270 +183.271 +183.272 +183.273 +183.274 +183.275 +183.276 +183.277 +183.278 +183.279 +184.252 +184.253 +184.254 +184.255 +184.256 +184.257 +184.258 +184.259 +184.260 +184.261 +184.262 +184.263 +184.264 +184.265 +184.266 +184.267 +184.268 +184.269 +184.270 +184.271 +184.272 +184.273 +184.274 +184.275 +184.276 +184.277 +184.278 +184.279 +185.251 +185.252 +185.253 +185.254 +185.255 +185.256 +185.257 +185.258 +185.259 +185.260 +185.261 +185.262 +185.263 +185.264 +185.265 +185.266 +185.267 +185.268 +185.269 +185.270 +185.271 +185.272 +185.273 +185.274 +185.275 +185.276 +185.277 +185.278 +185.279 +186.251 +186.252 +186.253 +186.254 +186.255 +186.256 +186.257 +186.258 +186.259 +186.260 +186.261 +186.262 +186.263 +186.264 +186.265 +186.266 +186.267 +186.268 +186.269 +186.270 +186.271 +186.272 +186.273 +186.274 +186.275 +186.276 +186.277 +186.278 +186.279 +186.285 +187.250 +187.251 +187.252 +187.253 +187.254 +187.255 +187.256 +187.257 +187.258 +187.259 +187.260 +187.261 +187.262 +187.263 +187.264 +187.265 +187.266 +187.267 +187.268 +187.269 +187.270 +187.271 +187.272 +187.273 +187.274 +187.275 +187.276 +187.277 +187.278 +187.279 +187.284 +187.285 +188.250 +188.251 +188.252 +188.253 +188.254 +188.255 +188.256 +188.257 +188.258 +188.259 +188.260 +188.261 +188.262 +188.263 +188.264 +188.265 +188.266 +188.267 +188.268 +188.269 +188.270 +188.271 +188.272 +188.273 +188.274 +188.275 +188.276 +188.277 +188.278 +188.279 +188.284 +188.285 +189.250 +189.251 +189.252 +189.253 +189.254 +189.255 +189.256 +189.257 +189.258 +189.259 +189.260 +189.261 +189.262 +189.263 +189.264 +189.265 +189.266 +189.267 +189.268 +189.269 +189.270 +189.271 +189.272 +189.273 +189.274 +189.275 +189.276 +189.277 +189.278 +189.279 +189.283 +189.284 +189.285 +190.249 +190.250 +190.251 +190.252 +190.253 +190.254 +190.255 +190.256 +190.257 +190.258 +190.259 +190.260 +190.261 +190.262 +190.263 +190.264 +190.265 +190.266 +190.267 +190.268 +190.269 +190.270 +190.271 +190.272 +190.273 +190.274 +190.275 +190.276 +190.277 +190.278 +190.279 +190.283 +190.284 +190.285 +191.248 +191.249 +191.250 +191.251 +191.252 +191.253 +191.254 +191.255 +191.256 +191.257 +191.258 +191.259 +191.260 +191.261 +191.262 +191.263 +191.264 +191.265 +191.266 +191.267 +191.268 +191.269 +191.270 +191.271 +191.272 +191.273 +191.274 +191.275 +191.276 +191.277 +191.278 +191.279 +191.282 +191.283 +191.284 +191.285 +192.248 +192.249 +192.250 +192.251 +192.252 +192.253 +192.254 +192.255 +192.256 +192.257 +192.258 +192.259 +192.260 +192.261 +192.262 +192.263 +192.264 +192.265 +192.266 +192.267 +192.268 +192.269 +192.270 +192.271 +192.272 +192.273 +192.274 +192.275 +192.276 +192.277 +192.278 +192.279 +192.282 +192.283 +192.284 +193.247 +193.248 +193.249 +193.250 +193.251 +193.252 +193.253 +193.254 +193.255 +193.256 +193.257 +193.258 +193.259 +193.260 +193.261 +193.262 +193.263 +193.264 +193.265 +193.266 +193.267 +193.268 +193.269 +193.270 +193.271 +193.272 +193.273 +193.274 +193.275 +193.276 +193.277 +193.278 +193.279 +193.281 +193.282 +193.283 +193.284 +194.246 +194.247 +194.248 +194.249 +194.250 +194.251 +194.252 +194.253 +194.254 +194.255 +194.256 +194.257 +194.258 +194.259 +194.260 +194.261 +194.262 +194.263 +194.264 +194.265 +194.266 +194.267 +194.268 +194.269 +194.270 +194.271 +194.272 +194.273 +194.274 +194.275 +194.276 +194.277 +194.278 +194.279 +194.280 +194.281 +194.282 +194.283 +195.245 +195.246 +195.247 +195.248 +195.249 +195.250 +195.251 +195.252 +195.253 +195.254 +195.255 +195.256 +195.257 +195.258 +195.259 +195.260 +195.261 +195.262 +195.263 +195.264 +195.265 +195.266 +195.267 +195.268 +195.269 +195.270 +195.271 +195.272 +195.273 +195.274 +195.275 +195.276 +195.277 +195.278 +195.279 +195.280 +195.281 +195.282 +195.283 +196.244 +196.245 +196.246 +196.247 +196.248 +196.249 +196.250 +196.251 +196.252 +196.253 +196.254 +196.255 +196.256 +196.257 +196.258 +196.259 +196.260 +196.261 +196.262 +196.263 +196.264 +196.265 +196.266 +196.267 +196.268 +196.269 +196.270 +196.271 +196.272 +196.273 +196.274 +196.275 +196.276 +196.277 +196.278 +196.279 +196.280 +196.281 +196.282 +196.283 +197.243 +197.244 +197.245 +197.246 +197.247 +197.248 +197.249 +197.250 +197.251 +197.252 +197.253 +197.254 +197.255 +197.256 +197.257 +197.258 +197.259 +197.260 +197.261 +197.262 +197.263 +197.264 +197.265 +197.266 +197.267 +197.268 +197.269 +197.270 +197.271 +197.272 +197.273 +197.274 +197.275 +197.276 +197.277 +197.278 +197.279 +197.280 +197.281 +197.282 +198.242 +198.243 +198.244 +198.245 +198.246 +198.247 +198.248 +198.249 +198.250 +198.251 +198.252 +198.253 +198.254 +198.255 +198.256 +198.257 +198.258 +198.259 +198.260 +198.261 +198.262 +198.263 +198.264 +198.265 +198.266 +198.267 +198.268 +198.269 +198.270 +198.271 +198.272 +198.273 +198.274 +198.275 +198.276 +198.277 +198.278 +198.279 +198.280 +198.281 +198.282 +199.242 +199.243 +199.244 +199.245 +199.246 +199.247 +199.248 +199.249 +199.250 +199.251 +199.252 +199.253 +199.254 +199.255 +199.256 +199.257 +199.258 +199.259 +199.260 +199.261 +199.262 +199.263 +199.264 +199.265 +199.266 +199.267 +199.268 +199.269 +199.270 +199.271 +199.272 +199.273 +199.274 +199.275 +199.276 +199.277 +199.278 +199.279 +199.280 +199.281 +200.241 +200.242 +200.243 +200.244 +200.245 +200.246 +200.247 +200.248 +200.249 +200.250 +200.251 +200.252 +200.253 +200.254 +200.255 +200.256 +200.257 +200.258 +200.259 +200.260 +200.261 +200.262 +200.263 +200.264 +200.265 +200.266 +200.267 +200.268 +200.269 +200.270 +200.271 +200.272 +200.273 +200.274 +200.275 +200.276 +200.277 +200.278 +200.279 +200.280 +200.281 +201.240 +201.241 +201.242 +201.243 +201.244 +201.245 +201.246 +201.247 +201.248 +201.249 +201.250 +201.251 +201.252 +201.253 +201.254 +201.255 +201.256 +201.257 +201.258 +201.259 +201.260 +201.261 +201.262 +201.263 +201.264 +201.265 +201.266 +201.267 +201.268 +201.269 +201.270 +201.271 +201.272 +201.273 +201.274 +201.275 +201.276 +201.277 +201.278 +201.279 +201.280 +202.239 +202.240 +202.241 +202.242 +202.243 +202.244 +202.245 +202.246 +202.247 +202.248 +202.249 +202.250 +202.251 +202.252 +202.253 +202.254 +202.255 +202.256 +202.257 +202.258 +202.259 +202.260 +202.261 +202.262 +202.263 +202.264 +202.265 +202.266 +202.267 +202.268 +202.269 +202.270 +202.271 +202.272 +202.273 +202.274 +202.275 +202.276 +202.277 +202.278 +202.279 +202.280 +203.239 +203.240 +203.241 +203.242 +203.243 +203.244 +203.245 +203.246 +203.247 +203.248 +203.249 +203.250 +203.251 +203.252 +203.253 +203.254 +203.255 +203.256 +203.257 +203.258 +203.259 +203.260 +203.261 +203.262 +203.263 +203.264 +203.265 +203.266 +203.267 +203.268 +203.269 +203.270 +203.271 +203.272 +203.273 +203.274 +203.275 +203.276 +203.277 +203.278 +203.279 +204.238 +204.239 +204.240 +204.241 +204.242 +204.243 +204.244 +204.245 +204.246 +204.247 +204.248 +204.249 +204.250 +204.251 +204.252 +204.253 +204.254 +204.255 +204.256 +204.257 +204.258 +204.259 +204.260 +204.261 +204.262 +204.263 +204.264 +204.265 +204.266 +204.267 +204.268 +204.269 +204.270 +204.271 +204.272 +204.273 +204.274 +204.275 +204.276 +204.277 +204.278 +204.279 +205.238 +205.239 +205.240 +205.241 +205.242 +205.243 +205.244 +205.245 +205.246 +205.247 +205.248 +205.249 +205.250 +205.251 +205.252 +205.253 +205.254 +205.255 +205.256 +205.257 +205.258 +205.259 +205.260 +205.261 +205.262 +205.263 +205.264 +205.265 +205.266 +205.267 +205.268 +205.269 +205.270 +205.271 +205.272 +205.273 +205.274 +205.275 +205.276 +205.277 +205.278 +206.238 +206.239 +206.240 +206.241 +206.242 +206.243 +206.244 +206.245 +206.246 +206.247 +206.248 +206.249 +206.250 +206.251 +206.252 +206.253 +206.254 +206.255 +206.256 +206.257 +206.258 +206.259 +206.260 +206.261 +206.262 +206.263 +206.264 +206.265 +206.266 +206.267 +206.268 +206.269 +206.270 +206.271 +206.272 +206.273 +206.274 +206.275 +206.276 +206.277 +206.278 +207.238 +207.239 +207.240 +207.241 +207.242 +207.243 +207.244 +207.245 +207.246 +207.247 +207.248 +207.249 +207.250 +207.251 +207.252 +207.253 +207.254 +207.255 +207.256 +207.257 +207.258 +207.259 +207.260 +207.261 +207.262 +207.263 +207.264 +207.265 +207.266 +207.267 +207.268 +207.269 +207.270 +207.271 +207.272 +207.273 +207.274 +207.275 +207.276 +207.277 +208.238 +208.239 +208.240 +208.241 +208.242 +208.243 +208.244 +208.245 +208.246 +208.247 +208.248 +208.249 +208.250 +208.251 +208.252 +208.253 +208.254 +208.255 +208.256 +208.257 +208.258 +208.259 +208.260 +208.261 +208.262 +208.263 +208.264 +208.265 +208.266 +208.267 +208.268 +208.269 +208.270 +208.271 +208.272 +208.273 +208.274 +208.275 +208.276 +208.277 +209.238 +209.239 +209.240 +209.241 +209.242 +209.243 +209.244 +209.245 +209.246 +209.247 +209.248 +209.249 +209.250 +209.251 +209.252 +209.253 +209.254 +209.255 +209.256 +209.257 +209.258 +209.259 +209.260 +209.261 +209.262 +209.263 +209.264 +209.265 +209.266 +209.267 +209.268 +209.269 +209.270 +209.271 +209.272 +209.273 +209.274 +209.275 +209.276 +210.238 +210.239 +210.240 +210.241 +210.242 +210.243 +210.244 +210.245 +210.246 +210.247 +210.248 +210.249 +210.250 +210.251 +210.252 +210.253 +210.254 +210.255 +210.256 +210.257 +210.258 +210.259 +210.260 +210.261 +210.262 +210.263 +210.264 +210.265 +210.266 +210.267 +210.268 +210.269 +210.270 +210.271 +210.272 +210.273 +210.274 +210.275 +210.276 +211.238 +211.239 +211.240 +211.241 +211.242 +211.243 +211.244 +211.245 +211.246 +211.247 +211.248 +211.249 +211.250 +211.251 +211.252 +211.253 +211.254 +211.255 +211.256 +211.257 +211.258 +211.259 +211.260 +211.261 +211.262 +211.263 +211.264 +211.265 +211.266 +211.267 +211.268 +211.269 +211.270 +211.271 +211.272 +211.273 +211.274 +211.275 +212.238 +212.239 +212.240 +212.241 +212.242 +212.243 +212.244 +212.245 +212.246 +212.247 +212.248 +212.249 +212.250 +212.251 +212.252 +212.253 +212.254 +212.255 +212.256 +212.257 +212.258 +212.259 +212.260 +212.261 +212.262 +212.263 +212.264 +212.265 +212.266 +212.267 +212.268 +212.269 +212.270 +212.271 +212.272 +212.273 +212.274 +212.275 +213.238 +213.239 +213.240 +213.241 +213.242 +213.243 +213.244 +213.245 +213.246 +213.247 +213.248 +213.249 +213.250 +213.251 +213.252 +213.253 +213.254 +213.255 +213.256 +213.257 +213.258 +213.259 +213.260 +213.261 +213.262 +213.263 +213.264 +213.265 +213.266 +213.267 +213.268 +213.269 +213.270 +213.271 +213.272 +213.273 +213.274 +214.238 +214.239 +214.240 +214.241 +214.242 +214.243 +214.244 +214.245 +214.246 +214.247 +214.248 +214.249 +214.250 +214.251 +214.252 +214.253 +214.254 +214.255 +214.256 +214.257 +214.258 +214.259 +214.260 +214.261 +214.262 +214.263 +214.264 +214.265 +214.266 +214.267 +214.268 +214.269 +214.270 +214.271 +214.272 +214.273 +214.274 +215.238 +215.239 +215.240 +215.241 +215.242 +215.243 +215.244 +215.245 +215.246 +215.247 +215.248 +215.249 +215.250 +215.251 +215.252 +215.253 +215.254 +215.255 +215.256 +215.257 +215.258 +215.259 +215.260 +215.261 +215.262 +215.263 +215.264 +215.265 +215.266 +215.267 +215.268 +215.269 +215.270 +215.271 +215.272 +215.273 +216.238 +216.239 +216.240 +216.241 +216.242 +216.243 +216.244 +216.245 +216.246 +216.247 +216.248 +216.249 +216.250 +216.251 +216.252 +216.253 +216.254 +216.255 +216.256 +216.257 +216.258 +216.259 +216.260 +216.261 +216.262 +216.263 +216.264 +216.265 +216.266 +216.267 +216.268 +216.269 +216.270 +216.271 +216.272 +216.273 +217.238 +217.239 +217.240 +217.241 +217.242 +217.243 +217.244 +217.245 +217.246 +217.247 +217.248 +217.249 +217.250 +217.251 +217.252 +217.253 +217.254 +217.255 +217.256 +217.257 +217.258 +217.259 +217.260 +217.261 +217.262 +217.263 +217.264 +217.265 +217.266 +217.267 +217.268 +217.269 +217.270 +217.271 +217.272 +218.238 +218.239 +218.240 +218.241 +218.242 +218.243 +218.244 +218.245 +218.246 +218.247 +218.248 +218.249 +218.250 +218.251 +218.252 +218.253 +218.254 +218.255 +218.256 +218.257 +218.258 +218.259 +218.260 +218.261 +218.262 +218.263 +218.264 +218.265 +218.266 +218.267 +218.268 +218.269 +218.270 +218.271 +218.272 +219.238 +219.239 +219.240 +219.241 +219.242 +219.243 +219.244 +219.245 +219.246 +219.247 +219.248 +219.249 +219.250 +219.251 +219.252 +219.253 +219.254 +219.255 +219.256 +219.257 +219.258 +219.259 +219.260 +219.261 +219.262 +219.263 +219.264 +219.265 +219.266 +219.267 +219.268 +219.269 +219.270 +219.271 +220.238 +220.239 +220.240 +220.241 +220.242 +220.243 +220.244 +220.245 +220.246 +220.247 +220.248 +220.249 +220.250 +220.251 +220.252 +220.253 +220.254 +220.255 +220.256 +220.257 +220.258 +220.259 +220.260 +220.261 +220.262 +220.263 +220.264 +220.265 +220.266 +220.267 +220.268 +220.269 +220.270 +220.271 +221.238 +221.239 +221.240 +221.241 +221.242 +221.243 +221.244 +221.245 +221.246 +221.247 +221.248 +221.249 +221.250 +221.251 +221.252 +221.253 +221.254 +221.255 +221.256 +221.257 +221.258 +221.259 +221.260 +221.261 +221.262 +221.263 +221.264 +221.265 +221.266 +221.267 +221.268 +221.269 +221.270 +222.238 +222.239 +222.240 +222.241 +222.242 +222.243 +222.244 +222.245 +222.246 +222.247 +222.248 +222.249 +222.250 +222.251 +222.252 +222.253 +222.254 +222.255 +222.256 +222.257 +222.258 +222.259 +222.260 +222.261 +222.262 +222.263 +222.264 +222.265 +222.266 +222.267 +222.268 +222.269 +222.270 +223.238 +223.239 +223.240 +223.241 +223.242 +223.243 +223.244 +223.245 +223.246 +223.247 +223.248 +223.249 +223.250 +223.251 +223.252 +223.253 +223.254 +223.255 +223.256 +223.257 +223.258 +223.259 +223.260 +223.261 +223.262 +223.263 +223.264 +223.265 +223.266 +223.267 +223.268 +223.269 +224.238 +224.239 +224.240 +224.241 +224.242 +224.243 +224.244 +224.245 +224.246 +224.247 +224.248 +224.249 +224.250 +224.251 +224.252 +224.253 +224.254 +224.255 +224.256 +224.257 +224.258 +224.259 +224.260 +224.261 +224.262 +224.263 +224.264 +224.265 +224.266 +224.267 +224.268 +224.269 +225.238 +225.239 +225.240 +225.241 +225.242 +225.243 +225.244 +225.245 +225.246 +225.247 +225.248 +225.249 +225.250 +225.251 +225.252 +225.253 +225.254 +225.255 +225.256 +225.257 +225.258 +225.259 +225.260 +225.261 +225.262 +225.263 +225.264 +225.265 +225.266 +225.267 +225.268 +226.238 +226.239 +226.240 +226.241 +226.242 +226.243 +226.244 +226.245 +226.246 +226.247 +226.248 +226.249 +226.250 +226.251 +226.252 +226.253 +226.254 +226.255 +226.256 +226.257 +226.258 +226.259 +226.260 +226.261 +226.262 +226.263 +226.264 +226.265 +226.266 +226.267 +226.268 +227.238 +227.239 +227.240 +227.241 +227.242 +227.243 +227.244 +227.245 +227.246 +227.247 +227.248 +227.249 +227.250 +227.251 +227.252 +227.253 +227.254 +227.255 +227.256 +227.257 +227.258 +227.259 +227.260 +227.261 +227.262 +227.263 +227.264 +227.265 +227.266 +227.267 +228.238 +228.239 +228.240 +228.241 +228.242 +228.243 +228.244 +228.245 +228.246 +228.247 +228.248 +228.249 +228.250 +228.251 +228.252 +228.253 +228.254 +228.255 +228.256 +228.257 +228.258 +228.259 +228.260 +228.261 +228.262 +228.263 +228.264 +228.265 +228.266 +228.267 +229.238 +229.239 +229.240 +229.241 +229.242 +229.243 +229.244 +229.245 +229.246 +229.247 +229.248 +229.249 +229.250 +229.251 +229.252 +229.253 +229.254 +229.255 +229.256 +229.257 +229.258 +229.259 +229.260 +229.261 +229.262 +229.263 +229.264 +229.265 +229.266 +230.238 +230.239 +230.240 +230.241 +230.242 +230.243 +230.244 +230.245 +230.246 +230.247 +230.248 +230.249 +230.250 +230.251 +230.252 +230.253 +230.254 +230.255 +230.256 +230.257 +230.258 +230.259 +230.260 +230.261 +230.262 +230.263 +230.264 +230.265 +230.266 +231.238 +231.239 +231.240 +231.241 +231.242 +231.243 +231.244 +231.245 +231.246 +231.247 +231.248 +231.249 +231.250 +231.251 +231.252 +231.253 +231.254 +231.255 +231.256 +231.257 +231.258 +231.259 +231.260 +231.261 +231.262 +231.263 +231.264 +231.265 +232.238 +232.239 +232.240 +232.241 +232.242 +232.243 +232.244 +232.245 +232.246 +232.247 +232.248 +232.249 +232.250 +232.251 +232.252 +232.253 +232.254 +232.255 +232.256 +232.257 +232.258 +232.259 +232.260 +232.261 +232.262 +232.263 +232.264 +232.265 +233.238 +233.239 +233.240 +233.241 +233.242 +233.243 +233.244 +233.245 +233.246 +233.247 +233.248 +233.249 +233.250 +233.251 +233.252 +233.253 +233.254 +233.255 +233.256 +233.257 +233.258 +233.259 +233.260 +233.261 +233.262 +233.263 +233.264 +234.238 +234.239 +234.240 +234.241 +234.242 +234.243 +234.244 +234.245 +234.246 +234.247 +234.248 +234.249 +234.250 +234.251 +234.252 +234.253 +234.254 +234.255 +234.256 +234.257 +234.258 +234.259 +234.260 +234.261 +234.262 +234.263 +234.264 +235.238 +235.239 +235.240 +235.241 +235.242 +235.243 +235.244 +235.245 +235.246 +235.247 +235.248 +235.249 +235.250 +235.251 +235.252 +235.253 +235.254 +235.255 +235.256 +235.257 +235.258 +235.259 +235.260 +235.261 +235.262 +235.263 +236.238 +236.239 +236.240 +236.241 +236.242 +236.243 +236.244 +236.245 +236.246 +236.247 +236.248 +236.249 +236.250 +236.251 +236.252 +236.253 +236.254 +236.255 +236.256 +236.257 +236.258 +236.259 +236.260 +236.261 +236.262 +237.238 +237.239 +237.240 +237.241 +237.242 +237.243 +237.244 +237.245 +237.246 +237.247 +237.248 +237.249 +237.250 +237.251 +237.252 +237.253 +237.254 +237.255 +237.256 +237.257 +237.258 +237.259 +237.260 +237.261 +237.262 +238.238 +238.239 +238.240 +238.241 +238.242 +238.243 +238.244 +238.245 +238.246 +238.247 +238.248 +238.249 +238.250 +238.251 +238.252 +238.253 +238.254 +238.255 +238.256 +238.257 +238.258 +238.259 +238.260 +238.261 +239.238 +239.239 +239.240 +239.241 +239.242 +239.243 +239.244 +239.245 +239.246 +239.247 +239.248 +239.249 +239.250 +239.251 +239.252 +239.253 +239.254 +239.255 +239.256 +239.257 +239.258 +239.259 +239.260 +239.261 +240.238 +240.239 +240.240 +240.241 +240.242 +240.243 +240.244 +240.245 +240.246 +240.247 +240.248 +240.249 +240.250 +240.251 +240.252 +240.253 +240.254 +240.255 +240.256 +240.257 +240.258 +240.259 +240.260 +241.238 +241.239 +241.240 +241.241 +241.242 +241.243 +241.244 +241.245 +241.246 +241.247 +241.248 +241.249 +241.250 +241.251 +241.252 +241.253 +241.254 +241.255 +241.256 +241.257 +241.258 +241.259 +241.260 +242.238 +242.239 +242.240 +242.241 +242.242 +242.243 +242.244 +242.245 +242.246 +242.247 +242.248 +242.249 +242.250 +242.251 +242.252 +242.253 +242.254 +242.255 +242.256 +242.257 +242.258 +242.259 +243.238 +243.239 +243.240 +243.241 +243.242 +243.243 +243.244 +243.245 +243.246 +243.247 +243.248 +243.249 +243.250 +243.251 +243.252 +243.253 +243.254 +243.255 +243.256 +243.257 +243.258 +243.259 +244.238 +244.239 +244.240 +244.241 +244.242 +244.243 +244.244 +244.245 +244.246 +244.247 +244.248 +244.249 +244.250 +244.251 +244.252 +244.253 +244.254 +244.255 +244.256 +244.257 +244.258 +245.238 +245.239 +245.240 +245.241 +245.242 +245.243 +245.244 +245.245 +245.246 +245.247 +245.248 +245.249 +245.250 +245.251 +245.252 +245.253 +245.254 +245.255 +245.256 +245.257 +246.239 +246.240 +246.241 +246.242 +246.243 +246.244 +246.245 +246.246 +246.247 +246.248 +246.249 +246.250 +246.251 +246.252 +246.253 +246.254 +246.255 +246.256 +246.257 +247.239 +247.240 +247.241 +247.242 +247.243 +247.244 +247.245 +247.246 +247.247 +247.248 +247.249 +247.250 +247.251 +247.252 +247.253 +247.254 +247.255 +247.256 +248.239 +248.240 +248.241 +248.242 +248.243 +248.244 +248.245 +248.246 +248.247 +248.248 +248.249 +248.250 +248.251 +248.252 +248.253 +248.254 +248.255 +248.256 +249.238 +249.239 +249.240 +249.241 +249.242 +249.243 +249.244 +249.245 +249.246 +249.247 +249.248 +249.249 +249.250 +249.251 +249.252 +249.253 +249.254 +249.255 +250.238 +250.239 +250.240 +250.241 +250.242 +250.243 +250.244 +250.245 +250.246 +250.247 +250.248 +250.249 +250.250 +250.251 +250.252 +250.253 +250.254 +251.238 +251.239 +251.240 +251.241 +251.242 +251.243 +251.244 +251.245 +251.246 +251.247 +251.248 +251.249 +251.250 +251.251 +251.252 +251.253 +252.238 +252.239 +252.240 +252.241 +252.242 +252.243 +252.244 +252.245 +252.246 +252.247 +252.248 +252.249 +252.250 +252.251 +252.252 +252.253 +253.238 +253.239 +253.240 +253.241 +253.242 +253.243 +253.244 +253.245 +253.246 +253.247 +253.248 +253.249 +253.250 +253.251 +253.252 +254.238 +254.239 +254.240 +254.241 +254.242 +254.243 +254.244 +254.245 +254.246 +254.247 +254.248 +254.249 +254.250 +254.251 +255.238 +255.239 +255.240 +255.241 +255.242 +255.243 +255.244 +255.245 +255.246 +255.247 +255.248 +255.249 +255.250 +255.251 +256.238 +256.239 +256.240 +256.241 +256.242 +256.243 +256.244 +256.245 +256.246 +256.247 +256.248 +256.249 +256.250 +256.251 +257.238 +257.239 +257.240 +257.241 +257.242 +257.243 +257.244 +257.245 +257.246 +257.247 +257.248 +257.249 +257.250 +258.238 +258.239 +258.240 +258.241 +258.242 +258.243 +258.244 +258.245 +258.246 +258.247 +258.248 +258.249 +258.250 +259.238 +259.239 +259.240 +259.241 +259.242 +259.243 +259.244 +259.245 +259.246 +259.247 +259.248 +259.249 +260.238 +260.239 +260.240 +260.241 +260.242 +260.243 +260.244 +260.245 +260.246 +260.247 +260.248 +261.238 +261.239 +261.240 +261.241 +261.242 +261.243 +261.244 +261.245 +261.246 +261.247 +261.248 +262.238 +262.239 +262.240 +262.241 +262.242 +262.243 +262.244 +262.245 +262.246 +262.247 +263.238 +263.239 +263.240 +263.241 +263.242 +263.243 +263.244 +263.245 +263.246 +264.238 +264.239 +264.240 +264.241 +264.242 +264.243 +264.244 +264.245 +265.238 +265.239 +265.240 +265.241 +265.242 +265.243 +265.244 +266.238 +266.239 +266.240 +266.241 +266.242 +266.243 +266.244 +267.238 +267.239 +267.240 +267.241 +267.242 +267.243 +268.238 +268.239 +268.240 +268.241 +268.242 +268.243 +269.238 +269.239 +269.240 +269.241 +269.242 +270.238 +270.239 +270.240 +270.241 +271.238 +271.239 +271.240 +272.238 +272.239 diff --git a/auxdir/CFIS/tiles_202510/tiles_P10.txt b/auxdir/CFIS/tiles_202510/tiles_P10.txt new file mode 100644 index 00000000..3153ed87 --- /dev/null +++ b/auxdir/CFIS/tiles_202510/tiles_P10.txt @@ -0,0 +1,676 @@ +024.348 +025.348 +025.349 +026.347 +026.348 +026.350 +027.346 +027.347 +027.348 +027.351 +028.347 +028.351 +029.345 +029.347 +029.350 +029.351 +030.350 +030.351 +031.344 +031.348 +031.350 +031.351 +032.342 +032.343 +032.349 +032.350 +032.351 +033.342 +033.343 +033.349 +033.350 +033.351 +034.341 +034.342 +034.347 +034.349 +034.350 +034.351 +035.340 +035.341 +035.342 +035.348 +035.349 +035.350 +036.339 +036.340 +036.341 +036.342 +036.348 +036.349 +036.350 +037.339 +037.340 +037.341 +037.342 +037.348 +037.349 +037.350 +038.338 +038.339 +038.340 +038.341 +038.342 +038.347 +038.348 +038.349 +038.350 +039.338 +039.339 +039.340 +039.341 +039.342 +039.347 +039.348 +039.349 +039.350 +040.337 +040.338 +040.339 +040.340 +040.341 +040.342 +040.347 +040.348 +040.349 +040.350 +041.337 +041.338 +041.339 +041.340 +041.341 +041.342 +041.346 +041.347 +041.348 +041.349 +041.350 +042.336 +042.337 +042.338 +042.339 +042.340 +042.341 +042.346 +042.347 +042.348 +042.349 +043.336 +043.337 +043.338 +043.339 +043.340 +043.341 +043.346 +043.347 +043.348 +043.349 +044.335 +044.336 +044.337 +044.338 +044.339 +044.340 +044.341 +044.345 +044.346 +044.347 +044.348 +044.349 +045.334 +045.335 +045.336 +045.337 +045.338 +045.339 +045.340 +045.341 +045.345 +045.346 +045.347 +045.348 +045.349 +046.334 +046.335 +046.336 +046.337 +046.338 +046.339 +046.340 +046.341 +046.345 +046.346 +046.347 +046.348 +047.334 +047.335 +047.336 +047.337 +047.338 +047.339 +047.340 +047.344 +047.345 +047.346 +047.347 +047.348 +048.333 +048.334 +048.335 +048.336 +048.337 +048.338 +048.339 +048.344 +048.345 +048.346 +048.347 +048.348 +049.333 +049.334 +049.335 +049.336 +049.337 +049.338 +049.339 +049.343 +049.344 +049.345 +049.346 +049.347 +049.348 +050.332 +050.333 +050.334 +050.335 +050.336 +050.337 +050.338 +050.343 +050.344 +050.345 +050.346 +050.347 +050.348 +051.332 +051.333 +051.334 +051.335 +051.336 +051.337 +051.338 +051.342 +051.343 +051.344 +051.345 +051.346 +051.347 +051.348 +052.331 +052.333 +052.334 +052.335 +052.336 +052.337 +052.341 +052.342 +052.343 +052.344 +052.345 +052.346 +052.347 +052.348 +053.333 +053.334 +053.335 +053.336 +053.337 +053.341 +053.342 +053.343 +053.344 +053.345 +053.346 +053.347 +053.348 +054.330 +054.333 +054.334 +054.335 +054.336 +054.341 +054.342 +054.343 +054.344 +054.345 +054.346 +054.347 +055.333 +055.334 +055.335 +055.336 +055.340 +055.341 +055.342 +055.343 +055.344 +055.345 +055.346 +055.347 +056.329 +056.333 +056.334 +056.335 +056.340 +056.341 +056.342 +056.343 +056.344 +056.345 +056.346 +056.347 +057.333 +057.334 +057.335 +057.339 +057.340 +057.341 +057.342 +057.343 +057.344 +057.346 +057.347 +058.328 +058.335 +058.339 +058.340 +058.341 +058.342 +058.343 +058.344 +058.346 +059.339 +059.340 +059.341 +059.342 +059.344 +059.346 +060.339 +060.340 +060.341 +060.342 +060.345 +060.346 +061.339 +061.340 +061.341 +061.342 +061.345 +061.346 +062.325 +062.338 +062.339 +062.340 +062.341 +062.342 +062.345 +063.338 +063.339 +063.340 +063.341 +063.345 +064.338 +064.339 +064.340 +064.341 +064.344 +064.345 +065.323 +065.338 +065.339 +065.340 +065.344 +065.345 +066.322 +066.338 +066.339 +066.340 +066.344 +067.338 +067.339 +067.340 +067.344 +068.338 +068.339 +068.344 +069.338 +069.339 +069.344 +070.338 +070.339 +070.344 +071.338 +071.339 +071.344 +072.338 +072.344 +073.338 +073.343 +073.344 +074.338 +074.343 +074.344 +075.343 +075.344 +076.343 +076.344 +077.343 +077.344 +078.342 +078.343 +079.342 +080.342 +081.340 +081.342 +082.332 +082.340 +082.341 +082.342 +082.343 +083.332 +083.340 +083.341 +084.340 +084.341 +085.339 +085.340 +085.341 +086.339 +086.340 +086.341 +087.340 +088.338 +088.340 +089.332 +089.338 +089.340 +090.338 +090.340 +091.340 +092.339 +093.339 +094.339 +095.339 +096.339 +097.338 +097.339 +104.323 +105.323 +106.316 +106.322 +106.323 +107.315 +107.316 +107.322 +107.323 +108.315 +108.316 +108.322 +108.323 +109.314 +109.315 +109.316 +109.322 +109.323 +110.313 +110.314 +110.315 +110.316 +110.322 +110.323 +111.313 +111.314 +111.315 +111.316 +111.322 +111.323 +111.337 +112.312 +112.313 +112.314 +112.315 +112.316 +112.322 +112.323 +113.312 +113.313 +113.314 +113.315 +113.316 +113.322 +114.312 +114.313 +114.314 +114.315 +114.316 +114.322 +115.311 +115.312 +115.313 +115.314 +115.315 +115.316 +115.322 +116.311 +116.312 +116.313 +116.314 +116.315 +116.336 +117.310 +117.311 +117.312 +117.313 +117.314 +117.315 +117.336 +118.310 +118.311 +118.312 +118.313 +118.314 +119.309 +119.310 +119.311 +119.312 +119.313 +120.309 +120.310 +120.311 +120.312 +120.313 +121.308 +121.309 +121.310 +121.311 +121.312 +122.307 +122.308 +122.309 +122.310 +122.311 +122.312 +122.335 +123.306 +123.307 +123.309 +123.310 +123.311 +124.305 +124.306 +124.309 +124.310 +124.311 +125.305 +125.306 +125.309 +125.310 +126.304 +126.305 +126.308 +126.309 +126.310 +127.304 +127.305 +127.308 +127.309 +128.303 +128.304 +128.307 +128.308 +128.309 +129.303 +129.304 +129.307 +129.308 +130.302 +130.303 +130.306 +130.307 +130.308 +131.302 +131.303 +131.306 +131.307 +132.301 +132.302 +132.305 +132.306 +132.307 +133.301 +133.305 +133.306 +134.300 +134.301 +134.305 +134.306 +135.300 +135.301 +135.305 +136.300 +136.305 +137.312 +138.299 +139.299 +140.298 +166.306 +167.306 +181.304 +187.293 +225.278 +226.278 +227.278 +228.277 +228.278 +229.277 +230.276 +230.277 +231.276 +231.277 +232.275 +232.276 +232.277 +233.274 +233.275 +233.276 +233.277 +233.278 +234.274 +234.275 +234.276 +234.277 +234.278 +235.273 +235.274 +235.275 +235.276 +235.277 +235.278 +236.273 +236.274 +236.275 +236.276 +236.277 +237.272 +237.273 +237.274 +237.275 +237.276 +237.277 +238.272 +238.273 +238.274 +238.275 +238.276 +239.271 +239.272 +239.273 +239.274 +239.275 +239.276 +240.271 +240.272 +240.273 +240.274 +240.275 +241.271 +241.272 +241.273 +241.274 +241.275 +242.270 +242.271 +242.272 +242.273 +242.274 +242.275 +243.270 +243.271 +243.272 +243.273 +243.274 +244.270 +244.271 +244.272 +244.273 +245.270 +245.271 +245.272 +245.273 +246.270 +246.271 +246.272 +247.238 +247.270 +247.271 +247.272 +248.238 +248.270 +248.271 +249.270 +249.271 +250.270 +251.270 +280.260 +423.258 +662.192 diff --git a/auxdir/CFIS/tiles_202510/tiles_P2.txt b/auxdir/CFIS/tiles_202510/tiles_P2.txt new file mode 100644 index 00000000..564121a7 --- /dev/null +++ b/auxdir/CFIS/tiles_202510/tiles_P2.txt @@ -0,0 +1,1514 @@ +000.238 +000.239 +000.240 +000.241 +000.242 +000.243 +000.244 +000.245 +000.246 +000.247 +000.248 +000.249 +000.250 +000.251 +000.252 +000.253 +000.254 +000.255 +001.238 +001.239 +001.240 +001.241 +001.242 +001.243 +001.244 +001.245 +001.246 +001.247 +001.248 +001.249 +001.250 +001.251 +001.252 +001.253 +001.254 +001.255 +002.238 +002.239 +002.240 +002.241 +002.242 +002.243 +002.244 +002.245 +002.246 +002.247 +002.248 +002.249 +002.250 +002.251 +002.252 +002.253 +002.254 +002.255 +003.238 +003.239 +003.240 +003.241 +003.242 +003.243 +003.244 +003.245 +003.246 +003.247 +003.248 +003.249 +003.250 +003.251 +003.252 +003.253 +003.254 +003.255 +004.238 +004.239 +004.240 +004.241 +004.242 +004.243 +004.244 +004.245 +004.246 +004.247 +004.248 +004.249 +004.250 +004.251 +004.252 +004.253 +004.254 +004.255 +005.238 +005.239 +005.240 +005.241 +005.242 +005.243 +005.244 +005.245 +005.246 +005.247 +005.248 +005.249 +005.250 +005.251 +005.252 +005.253 +005.254 +005.255 +006.238 +006.239 +006.240 +006.241 +006.242 +006.243 +006.244 +006.245 +006.246 +006.247 +006.248 +006.249 +006.250 +006.251 +006.252 +006.253 +006.254 +006.255 +007.238 +007.239 +007.240 +007.241 +007.242 +007.243 +007.244 +007.245 +007.246 +007.247 +007.248 +007.249 +007.250 +007.251 +007.252 +007.253 +007.254 +007.255 +008.238 +008.239 +008.240 +008.241 +008.242 +008.243 +008.244 +008.245 +008.246 +008.247 +008.248 +008.249 +008.250 +008.251 +008.252 +008.253 +008.254 +008.255 +009.238 +009.239 +009.240 +009.241 +009.242 +009.243 +009.244 +009.245 +009.246 +009.247 +009.248 +009.249 +009.250 +009.251 +009.252 +009.253 +009.254 +009.255 +010.238 +010.239 +010.240 +010.241 +010.242 +010.243 +010.244 +010.245 +010.246 +010.247 +010.248 +010.249 +010.250 +010.251 +010.252 +010.253 +010.254 +010.255 +011.238 +011.239 +011.240 +011.241 +011.242 +011.243 +011.244 +011.245 +011.246 +011.247 +011.248 +011.249 +011.250 +011.251 +011.252 +011.253 +011.254 +011.255 +012.238 +012.239 +012.240 +012.241 +012.242 +012.243 +012.244 +012.245 +012.246 +012.247 +012.248 +012.249 +012.250 +012.251 +012.252 +012.253 +012.254 +012.255 +013.238 +013.239 +013.240 +013.241 +013.242 +013.243 +013.244 +013.245 +013.246 +013.247 +013.248 +013.249 +013.250 +013.251 +013.252 +013.253 +013.254 +013.255 +014.238 +014.239 +014.240 +014.241 +014.242 +014.243 +014.244 +014.245 +014.246 +014.247 +014.248 +014.249 +014.250 +014.251 +014.252 +014.253 +014.254 +014.255 +015.238 +015.239 +015.240 +015.241 +015.242 +015.243 +015.244 +015.245 +015.246 +015.247 +015.248 +015.249 +015.250 +015.251 +015.252 +015.253 +015.254 +015.255 +016.238 +016.239 +016.240 +016.241 +016.242 +016.243 +016.244 +016.245 +016.246 +016.247 +016.248 +016.249 +016.250 +016.251 +016.252 +016.253 +016.254 +016.255 +017.238 +017.239 +017.240 +017.241 +017.242 +017.243 +017.244 +017.245 +017.246 +017.247 +017.248 +017.249 +017.250 +017.251 +017.252 +017.253 +017.254 +017.255 +018.238 +018.239 +018.240 +018.241 +018.242 +018.243 +018.244 +018.245 +018.246 +018.247 +018.248 +018.249 +018.250 +018.251 +018.252 +018.253 +018.254 +018.255 +019.238 +019.239 +019.240 +019.241 +019.242 +019.243 +019.244 +019.245 +019.246 +019.247 +019.248 +019.249 +019.250 +019.251 +019.252 +019.253 +019.254 +019.255 +020.238 +020.239 +020.240 +020.241 +020.242 +020.243 +020.244 +020.245 +020.246 +020.247 +020.248 +020.249 +020.250 +020.251 +020.252 +020.253 +020.254 +020.255 +021.238 +021.239 +021.240 +021.241 +021.242 +021.243 +021.244 +021.245 +021.246 +021.247 +021.248 +021.249 +021.250 +021.251 +021.252 +021.253 +021.254 +021.255 +022.238 +022.239 +022.240 +022.241 +022.242 +022.243 +022.244 +022.245 +022.246 +022.247 +022.248 +022.249 +022.250 +022.251 +022.252 +022.253 +022.254 +022.255 +023.238 +023.239 +023.240 +023.241 +023.242 +023.243 +023.244 +023.245 +023.246 +023.247 +023.248 +023.249 +023.250 +023.251 +023.252 +023.253 +023.254 +023.255 +024.238 +024.239 +024.240 +024.241 +024.242 +024.243 +024.244 +024.245 +024.246 +024.247 +024.248 +024.249 +024.250 +024.251 +024.252 +024.253 +024.254 +024.255 +025.238 +025.239 +025.240 +025.241 +025.242 +025.243 +025.244 +025.245 +025.246 +025.247 +025.248 +025.249 +025.250 +025.251 +025.252 +025.253 +025.254 +025.255 +026.238 +026.239 +026.240 +026.241 +026.242 +026.243 +026.244 +026.245 +026.246 +026.247 +026.248 +026.249 +026.250 +026.251 +026.252 +026.253 +026.254 +026.255 +027.238 +027.239 +027.240 +027.241 +027.242 +027.243 +027.244 +027.245 +027.246 +027.247 +027.248 +027.249 +027.250 +027.251 +027.252 +027.253 +027.254 +027.255 +028.238 +028.239 +028.240 +028.241 +028.242 +028.243 +028.244 +028.245 +028.246 +028.247 +028.248 +028.249 +028.250 +028.251 +028.252 +028.253 +028.254 +028.255 +029.238 +029.239 +029.240 +029.241 +029.242 +029.243 +029.244 +029.245 +029.246 +029.247 +029.248 +029.249 +029.250 +029.251 +029.252 +029.253 +029.254 +029.255 +030.238 +030.239 +030.240 +030.241 +030.242 +030.243 +030.244 +030.245 +030.246 +030.247 +030.248 +030.249 +030.250 +030.251 +030.252 +030.253 +030.254 +030.255 +031.238 +031.239 +031.240 +031.241 +031.242 +031.243 +031.244 +031.245 +031.246 +031.247 +031.248 +031.249 +031.250 +031.251 +031.252 +031.253 +031.254 +031.255 +032.238 +032.239 +032.240 +032.241 +032.242 +032.243 +032.244 +032.245 +032.246 +032.247 +032.248 +032.249 +032.250 +032.251 +032.252 +032.253 +032.254 +032.255 +033.238 +033.239 +033.240 +033.241 +033.242 +033.243 +033.244 +033.245 +033.246 +033.247 +033.248 +033.249 +033.250 +033.251 +033.252 +033.253 +033.254 +033.255 +034.238 +034.239 +034.240 +034.241 +034.242 +034.243 +034.244 +034.245 +034.246 +034.247 +034.248 +034.249 +034.250 +034.251 +034.252 +034.253 +034.254 +034.255 +035.238 +035.239 +035.240 +035.241 +035.242 +035.243 +035.244 +035.245 +035.246 +035.247 +035.248 +035.249 +035.250 +035.251 +035.252 +035.253 +035.254 +035.255 +036.238 +036.239 +036.240 +036.241 +036.242 +036.243 +036.244 +036.245 +036.246 +036.247 +036.248 +036.249 +036.250 +036.251 +036.252 +036.253 +037.238 +037.239 +037.240 +037.241 +037.242 +037.243 +037.244 +037.245 +037.246 +037.247 +037.248 +037.249 +037.250 +037.251 +037.252 +037.253 +038.238 +038.239 +038.240 +038.241 +038.242 +038.243 +038.244 +038.245 +038.246 +038.247 +038.248 +038.249 +038.250 +038.251 +038.252 +038.253 +039.238 +039.239 +039.240 +039.241 +039.242 +039.243 +039.244 +039.245 +039.246 +039.247 +039.248 +039.249 +039.250 +039.251 +039.252 +039.253 +040.238 +040.239 +040.240 +040.241 +040.242 +040.243 +040.244 +040.245 +040.246 +040.247 +040.248 +040.249 +040.250 +040.251 +040.252 +040.253 +041.238 +041.239 +041.240 +041.241 +041.242 +041.243 +041.244 +041.245 +041.246 +041.247 +041.248 +041.249 +041.250 +041.251 +041.252 +041.253 +042.238 +042.239 +042.240 +042.241 +042.242 +042.243 +042.244 +042.245 +042.246 +042.247 +042.248 +042.249 +042.250 +042.251 +042.252 +042.253 +043.238 +043.239 +043.240 +043.241 +043.242 +043.243 +043.244 +043.245 +043.246 +043.247 +043.248 +043.249 +043.250 +043.251 +043.252 +043.253 +044.238 +044.239 +044.240 +044.241 +044.242 +044.243 +044.244 +044.245 +044.246 +044.247 +044.248 +044.249 +044.250 +044.251 +044.252 +044.253 +045.238 +045.239 +045.240 +045.241 +045.242 +045.243 +045.244 +045.245 +045.246 +045.247 +045.248 +045.249 +045.250 +045.251 +045.252 +045.253 +046.238 +046.239 +046.240 +046.241 +046.242 +046.243 +046.244 +046.245 +046.246 +046.247 +046.248 +046.249 +046.250 +046.251 +046.252 +046.253 +047.238 +047.239 +047.240 +047.241 +047.242 +047.243 +047.244 +047.245 +047.246 +047.247 +047.248 +047.249 +047.250 +047.251 +047.252 +047.253 +048.238 +048.239 +048.240 +048.241 +048.242 +048.243 +048.244 +048.245 +048.246 +048.247 +048.248 +048.249 +048.250 +048.251 +048.252 +048.253 +049.238 +049.239 +049.240 +049.241 +049.242 +049.243 +049.244 +049.245 +049.246 +049.247 +049.248 +049.249 +049.250 +049.251 +050.238 +050.239 +050.240 +050.241 +050.242 +050.243 +050.244 +050.245 +050.246 +050.247 +050.248 +050.249 +050.250 +050.251 +051.238 +051.239 +051.240 +051.241 +051.242 +051.243 +051.244 +051.245 +051.246 +051.247 +051.248 +051.249 +051.250 +051.251 +052.238 +052.239 +052.240 +052.241 +052.242 +052.243 +052.244 +052.245 +052.246 +052.247 +052.248 +052.249 +052.250 +052.251 +053.238 +053.239 +053.240 +053.241 +053.242 +053.243 +053.244 +053.245 +053.246 +053.247 +053.248 +053.249 +053.250 +053.251 +054.238 +054.239 +054.240 +054.241 +054.242 +054.243 +054.244 +054.245 +054.246 +054.247 +054.248 +054.249 +054.250 +054.251 +055.238 +055.239 +055.240 +055.241 +055.242 +055.243 +055.244 +055.245 +055.246 +055.247 +055.248 +055.249 +055.250 +055.251 +056.238 +056.239 +056.240 +056.241 +056.242 +056.243 +056.244 +056.245 +056.246 +056.247 +056.248 +056.249 +056.250 +056.251 +057.238 +057.239 +057.240 +057.241 +057.242 +057.243 +057.244 +057.245 +057.246 +057.247 +057.248 +057.249 +057.250 +058.238 +058.239 +058.240 +058.241 +058.242 +058.243 +058.244 +058.245 +058.246 +058.247 +058.248 +058.249 +058.250 +059.238 +059.239 +059.240 +059.241 +059.242 +059.243 +059.244 +059.245 +059.246 +059.247 +059.248 +059.249 +059.250 +060.238 +060.239 +060.240 +060.241 +060.242 +060.243 +060.244 +060.245 +060.246 +060.247 +060.248 +060.249 +060.250 +061.238 +061.239 +061.240 +061.241 +061.242 +061.243 +061.244 +061.245 +061.246 +061.247 +061.248 +062.238 +062.239 +062.240 +062.241 +062.242 +062.243 +062.244 +062.245 +062.246 +062.247 +062.248 +063.238 +063.239 +063.240 +063.241 +063.242 +063.243 +063.244 +063.245 +063.246 +063.247 +064.238 +064.239 +064.240 +064.241 +064.242 +065.240 +065.241 +567.255 +568.253 +568.255 +569.253 +569.255 +570.251 +570.253 +570.254 +570.255 +571.250 +571.251 +571.252 +571.253 +571.254 +571.255 +572.250 +572.251 +572.252 +572.253 +572.254 +572.255 +573.248 +573.250 +573.251 +573.252 +573.253 +573.254 +574.248 +574.249 +574.250 +574.251 +574.252 +574.253 +574.254 +575.248 +575.249 +575.250 +575.251 +575.252 +575.253 +575.254 +576.246 +576.247 +576.248 +576.249 +576.250 +576.251 +576.252 +576.253 +576.254 +577.246 +577.247 +577.248 +577.249 +577.250 +577.251 +577.252 +577.253 +578.246 +578.247 +578.248 +578.249 +578.250 +578.251 +578.252 +578.253 +579.244 +579.245 +579.246 +579.247 +579.248 +579.249 +579.250 +579.251 +579.252 +579.253 +580.244 +580.245 +580.246 +580.247 +580.248 +580.249 +580.250 +580.251 +580.252 +580.253 +581.244 +581.245 +581.246 +581.247 +581.248 +581.249 +581.250 +581.251 +581.252 +582.243 +582.244 +582.245 +582.246 +582.247 +582.248 +582.249 +582.250 +582.251 +582.252 +583.243 +583.244 +583.245 +583.246 +583.247 +583.248 +583.249 +583.250 +583.251 +583.252 +584.242 +584.243 +584.244 +584.245 +584.246 +584.247 +584.248 +584.249 +584.250 +584.251 +584.252 +585.242 +585.243 +585.244 +585.245 +585.246 +585.247 +585.248 +585.249 +585.250 +585.251 +586.242 +586.243 +586.244 +586.245 +586.246 +586.247 +586.248 +586.249 +586.250 +586.251 +587.241 +587.242 +587.243 +587.244 +587.245 +587.246 +587.247 +587.248 +587.249 +587.250 +587.251 +588.241 +588.242 +588.243 +588.244 +588.245 +588.246 +588.247 +588.248 +588.249 +588.250 +589.241 +589.242 +589.243 +589.244 +589.245 +589.246 +589.247 +589.248 +589.249 +589.250 +590.240 +590.241 +590.242 +590.243 +590.244 +590.245 +590.246 +590.247 +590.248 +590.249 +590.250 +591.240 +591.241 +591.242 +591.243 +591.244 +591.245 +591.246 +591.247 +591.248 +591.249 +591.250 +592.240 +592.241 +592.242 +592.243 +592.244 +592.245 +592.246 +592.247 +592.248 +592.249 +593.239 +593.240 +593.241 +593.242 +593.243 +593.244 +593.245 +593.246 +593.247 +593.248 +593.249 +594.239 +594.240 +594.241 +594.242 +594.243 +594.244 +594.245 +594.246 +594.247 +594.248 +594.249 +595.239 +595.240 +595.241 +595.242 +595.243 +595.244 +595.245 +595.246 +595.247 +595.248 +596.238 +596.239 +596.240 +596.241 +596.242 +596.243 +596.244 +596.245 +596.246 +596.247 +596.248 +597.238 +597.239 +597.240 +597.241 +597.242 +597.243 +597.244 +597.245 +597.246 +597.247 +597.248 +598.238 +598.239 +598.240 +598.241 +598.242 +598.243 +598.244 +598.245 +598.246 +598.247 +598.248 +599.238 +599.239 +599.240 +599.241 +599.242 +599.243 +599.244 +599.245 +599.246 +599.247 +600.238 +600.239 +600.240 +600.241 +600.242 +600.243 +600.244 +600.245 +600.246 +600.247 +601.238 +601.239 +601.240 +601.241 +601.242 +601.243 +601.244 +601.245 +601.246 +601.247 +602.238 +602.239 +602.240 +602.241 +602.242 +602.243 +602.244 +602.245 +602.246 +603.238 +603.239 +603.240 +603.241 +603.242 +603.243 +603.244 +603.245 +603.246 +604.238 +604.239 +604.240 +604.241 +604.242 +604.243 +604.244 +604.245 +604.246 +605.238 +605.239 +605.240 +605.241 +605.242 +605.243 +605.244 +605.245 +606.238 +606.239 +606.240 +606.241 +606.242 +606.243 +606.244 +606.245 +607.238 +607.239 +607.240 +607.241 +607.242 +607.243 +607.244 +607.245 +608.238 +608.239 +608.240 +608.241 +608.242 +608.243 +608.244 +608.245 +609.238 +609.239 +609.240 +609.241 +609.242 +609.243 +609.244 +610.238 +610.239 +610.240 +610.241 +610.242 +610.243 +610.244 +611.238 +611.239 +611.240 +611.241 +611.242 +611.243 +611.244 +612.238 +612.239 +612.240 +612.241 +612.242 +612.243 +613.238 +613.239 +613.240 +613.241 +613.242 +613.243 +614.238 +614.239 +614.240 +614.241 +614.242 +614.243 +615.238 +615.239 +615.240 +615.241 +615.242 +615.243 +616.238 +616.239 +616.240 +616.241 +616.242 +617.238 +617.239 +617.240 +617.241 +617.242 +618.238 +618.239 +618.240 +618.241 +618.242 +619.238 +619.239 +619.240 +619.241 +620.238 +620.239 +620.240 +620.241 +621.238 +621.239 +621.240 +621.241 +622.238 +622.239 +622.240 +622.241 +623.238 +623.239 +623.240 +624.238 +624.239 +624.240 +625.238 +625.239 +625.240 +626.238 +626.239 +627.238 +627.239 +628.238 +629.238 +630.238 diff --git a/auxdir/CFIS/tiles_202510/tiles_P3.txt b/auxdir/CFIS/tiles_202510/tiles_P3.txt new file mode 100644 index 00000000..8be695dd --- /dev/null +++ b/auxdir/CFIS/tiles_202510/tiles_P3.txt @@ -0,0 +1,1268 @@ +181.308 +182.308 +183.307 +183.308 +183.312 +184.307 +184.308 +184.312 +185.307 +185.308 +185.312 +186.306 +186.307 +186.308 +186.312 +187.306 +187.307 +187.308 +187.311 +187.312 +188.306 +188.307 +188.308 +188.310 +188.311 +189.305 +189.306 +189.307 +189.308 +189.310 +189.311 +190.305 +190.306 +190.307 +190.308 +190.310 +190.311 +191.305 +191.306 +191.307 +191.308 +191.310 +192.305 +192.306 +192.307 +192.308 +192.309 +192.310 +193.305 +193.306 +193.307 +193.308 +193.309 +193.310 +194.305 +194.306 +194.307 +194.308 +194.309 +194.310 +195.302 +195.305 +195.306 +195.307 +195.308 +195.309 +196.302 +196.305 +196.306 +196.307 +196.308 +196.309 +197.301 +197.302 +197.305 +197.306 +197.307 +197.308 +197.309 +198.301 +198.302 +198.305 +198.306 +198.307 +198.308 +198.309 +199.300 +199.301 +199.302 +199.305 +199.306 +199.307 +199.308 +200.300 +200.301 +200.302 +200.305 +200.306 +200.307 +200.308 +201.300 +201.301 +201.302 +201.305 +201.306 +201.307 +201.308 +202.299 +202.300 +202.301 +202.302 +202.305 +202.306 +202.307 +203.299 +203.300 +203.301 +203.302 +203.304 +203.305 +203.306 +203.307 +204.298 +204.299 +204.300 +204.301 +204.302 +204.304 +204.305 +204.306 +204.307 +205.298 +205.299 +205.300 +205.301 +205.302 +205.303 +205.304 +205.305 +205.306 +205.307 +206.298 +206.299 +206.300 +206.301 +206.302 +206.303 +206.304 +206.305 +206.306 +207.297 +207.298 +207.299 +207.300 +207.301 +207.302 +207.303 +207.304 +207.305 +207.306 +208.297 +208.298 +208.299 +208.300 +208.301 +208.302 +208.303 +208.304 +208.305 +208.306 +209.296 +209.297 +209.298 +209.299 +209.300 +209.301 +209.302 +209.303 +209.304 +209.305 +210.296 +210.297 +210.298 +210.299 +210.300 +210.301 +210.302 +210.303 +210.304 +210.305 +211.295 +211.296 +211.297 +211.298 +211.299 +211.300 +211.301 +211.302 +211.303 +211.304 +211.305 +212.295 +212.296 +212.297 +212.298 +212.299 +212.300 +212.301 +212.302 +212.303 +212.304 +212.305 +213.295 +213.296 +213.297 +213.298 +213.299 +213.300 +213.301 +213.302 +213.303 +213.304 +214.294 +214.295 +214.296 +214.297 +214.298 +214.299 +214.300 +214.301 +214.302 +214.303 +214.304 +215.294 +215.295 +215.296 +215.297 +215.298 +215.299 +215.300 +215.301 +215.302 +215.303 +215.304 +216.293 +216.294 +216.295 +216.296 +216.297 +216.298 +216.299 +216.300 +216.301 +216.302 +216.303 +217.293 +217.294 +217.295 +217.296 +217.297 +217.298 +217.299 +217.300 +217.301 +217.302 +217.303 +218.292 +218.293 +218.294 +218.295 +218.296 +218.297 +218.298 +218.299 +218.300 +218.301 +218.302 +218.303 +219.292 +219.293 +219.294 +219.295 +219.296 +219.297 +219.298 +219.299 +219.300 +219.301 +219.302 +219.303 +220.292 +220.293 +220.294 +220.295 +220.296 +220.297 +220.298 +220.299 +220.300 +220.301 +220.302 +221.291 +221.292 +221.293 +221.294 +221.295 +221.296 +221.297 +221.298 +221.299 +221.300 +221.301 +221.302 +222.291 +222.292 +222.293 +222.294 +222.295 +222.296 +222.297 +222.298 +222.299 +222.300 +222.301 +222.302 +223.290 +223.291 +223.292 +223.293 +223.294 +223.295 +223.296 +223.297 +223.298 +223.299 +223.300 +223.301 +223.302 +224.290 +224.291 +224.292 +224.293 +224.294 +224.295 +224.296 +224.297 +224.298 +224.299 +224.300 +224.301 +225.290 +225.291 +225.292 +225.293 +225.294 +225.295 +225.296 +225.297 +225.298 +225.299 +225.300 +225.301 +226.289 +226.290 +226.291 +226.292 +226.293 +226.294 +226.295 +226.296 +226.297 +226.298 +226.299 +226.300 +226.301 +227.289 +227.290 +227.291 +227.292 +227.293 +227.294 +227.295 +227.296 +227.297 +227.298 +227.299 +227.300 +228.288 +228.289 +228.290 +228.291 +228.292 +228.293 +228.294 +228.295 +228.296 +228.297 +228.298 +228.299 +228.300 +229.288 +229.289 +229.290 +229.291 +229.292 +229.293 +229.294 +229.295 +229.296 +229.297 +229.298 +229.299 +229.300 +230.287 +230.288 +230.289 +230.290 +230.291 +230.292 +230.293 +230.294 +230.295 +230.296 +230.297 +230.298 +230.299 +231.287 +231.288 +231.289 +231.290 +231.291 +231.292 +231.293 +231.294 +231.295 +231.296 +231.297 +231.298 +231.299 +232.286 +232.287 +232.288 +232.289 +232.290 +232.291 +232.292 +232.293 +232.294 +232.295 +232.296 +232.297 +232.298 +232.299 +233.286 +233.287 +233.288 +233.289 +233.290 +233.291 +233.292 +233.293 +233.294 +233.295 +233.296 +233.297 +233.298 +233.299 +234.286 +234.287 +234.288 +234.289 +234.290 +234.291 +234.292 +234.293 +234.294 +234.295 +234.296 +234.297 +234.298 +235.285 +235.286 +235.287 +235.288 +235.289 +235.290 +235.291 +235.292 +235.293 +235.294 +235.295 +235.296 +235.297 +235.298 +236.285 +236.286 +236.287 +236.288 +236.289 +236.290 +236.291 +236.292 +236.293 +236.294 +236.295 +236.296 +236.297 +236.298 +237.284 +237.285 +237.286 +237.287 +237.288 +237.289 +237.290 +237.291 +237.292 +237.293 +237.294 +237.295 +237.296 +237.297 +238.284 +238.285 +238.286 +238.287 +238.288 +238.289 +238.290 +238.291 +238.292 +238.293 +238.294 +238.295 +238.296 +238.297 +239.284 +239.285 +239.286 +239.287 +239.288 +239.289 +239.290 +239.291 +239.292 +239.293 +239.294 +239.295 +239.296 +239.297 +240.283 +240.284 +240.285 +240.286 +240.287 +240.288 +240.289 +240.290 +240.291 +240.292 +240.293 +240.294 +240.295 +240.296 +240.297 +241.283 +241.284 +241.285 +241.286 +241.287 +241.288 +241.289 +241.290 +241.291 +241.292 +241.293 +241.294 +241.295 +241.296 +242.283 +242.284 +242.285 +242.286 +242.287 +242.288 +242.289 +242.290 +242.291 +242.292 +242.293 +242.294 +242.295 +242.296 +243.282 +243.283 +243.284 +243.285 +243.286 +243.287 +243.288 +243.289 +243.290 +243.291 +243.292 +243.293 +243.294 +243.295 +243.296 +244.281 +244.282 +244.283 +244.284 +244.285 +244.286 +244.287 +244.288 +244.289 +244.290 +244.291 +244.292 +244.293 +244.294 +244.295 +245.281 +245.282 +245.283 +245.284 +245.285 +245.286 +245.287 +245.288 +245.289 +245.290 +245.291 +245.292 +245.293 +245.294 +245.295 +246.280 +246.281 +246.282 +246.283 +246.284 +246.285 +246.286 +246.287 +246.288 +246.289 +246.290 +246.291 +246.292 +246.293 +246.294 +246.295 +247.280 +247.281 +247.282 +247.283 +247.284 +247.285 +247.286 +247.287 +247.288 +247.289 +247.290 +247.291 +247.292 +247.293 +247.294 +247.295 +248.279 +248.280 +248.281 +248.282 +248.283 +248.284 +248.285 +248.286 +248.287 +248.288 +248.289 +248.290 +248.291 +248.292 +248.293 +248.294 +249.279 +249.280 +249.281 +249.282 +249.283 +249.284 +249.285 +249.286 +249.287 +249.288 +249.289 +249.290 +249.291 +249.292 +249.293 +249.294 +250.278 +250.279 +250.280 +250.281 +250.282 +250.283 +250.284 +250.285 +250.286 +250.287 +250.288 +250.289 +250.290 +250.291 +250.292 +250.293 +250.294 +251.278 +251.279 +251.280 +251.281 +251.282 +251.283 +251.284 +251.285 +251.286 +251.287 +251.288 +251.289 +251.290 +251.291 +251.292 +251.293 +252.277 +252.278 +252.279 +252.280 +252.281 +252.282 +252.283 +252.284 +252.285 +252.286 +252.287 +252.288 +252.289 +252.290 +252.291 +252.292 +252.293 +253.277 +253.278 +253.279 +253.280 +253.281 +253.282 +253.283 +253.284 +253.285 +253.286 +253.287 +253.288 +253.289 +253.290 +253.291 +253.292 +253.293 +254.277 +254.278 +254.279 +254.280 +254.281 +254.282 +254.283 +254.284 +254.285 +254.286 +254.287 +254.288 +254.289 +254.290 +254.291 +254.292 +255.276 +255.277 +255.278 +255.279 +255.280 +255.281 +255.282 +255.283 +255.284 +255.285 +255.286 +255.287 +255.288 +255.289 +255.290 +255.291 +255.292 +256.276 +256.277 +256.278 +256.279 +256.280 +256.281 +256.282 +256.283 +256.284 +256.285 +256.286 +256.287 +256.288 +256.289 +256.290 +256.291 +256.292 +257.276 +257.277 +257.278 +257.279 +257.280 +257.281 +257.282 +257.283 +257.284 +257.285 +257.286 +257.287 +257.288 +257.289 +257.290 +257.291 +257.292 +258.276 +258.277 +258.278 +258.279 +258.280 +258.281 +258.282 +258.283 +258.284 +258.285 +258.286 +258.287 +258.288 +258.289 +258.290 +258.291 +259.276 +259.277 +259.278 +259.279 +259.280 +259.281 +259.282 +259.283 +259.284 +259.285 +259.286 +259.287 +259.288 +259.289 +259.290 +259.291 +260.276 +260.277 +260.278 +260.279 +260.280 +260.281 +260.282 +260.283 +260.284 +260.285 +260.286 +260.287 +260.288 +260.289 +260.290 +260.291 +261.276 +261.277 +261.278 +261.279 +261.280 +261.281 +261.282 +261.283 +261.284 +261.285 +261.286 +261.287 +261.288 +261.289 +261.290 +262.276 +262.277 +262.278 +262.279 +262.280 +262.281 +262.282 +262.283 +262.284 +262.285 +262.286 +262.287 +262.288 +262.289 +262.290 +263.276 +263.277 +263.278 +263.279 +263.280 +263.281 +263.282 +263.283 +263.284 +263.285 +263.286 +263.287 +263.288 +263.289 +263.290 +264.276 +264.277 +264.278 +264.279 +264.280 +264.281 +264.282 +264.283 +264.284 +264.285 +264.286 +264.287 +264.288 +264.289 +265.276 +265.277 +265.278 +265.279 +265.280 +265.281 +265.282 +265.283 +265.284 +265.285 +265.286 +265.287 +265.288 +265.289 +266.276 +266.277 +266.278 +266.279 +266.280 +266.281 +266.282 +266.283 +266.284 +266.285 +266.286 +266.287 +266.288 +266.289 +267.276 +267.277 +267.278 +267.279 +267.280 +267.281 +267.282 +267.283 +267.284 +267.285 +267.286 +267.287 +267.288 +267.289 +268.276 +268.277 +268.278 +268.279 +268.280 +268.281 +268.282 +268.283 +268.284 +268.285 +268.286 +268.287 +268.288 +269.276 +269.277 +269.278 +269.279 +269.280 +269.281 +269.282 +269.283 +269.284 +269.285 +269.286 +269.287 +269.288 +270.276 +270.277 +270.278 +270.279 +270.280 +270.281 +270.282 +270.283 +270.284 +270.285 +270.286 +270.287 +270.288 +271.276 +271.277 +271.278 +271.279 +271.280 +271.281 +271.282 +271.283 +271.284 +271.285 +271.286 +271.287 +272.276 +272.277 +272.278 +272.279 +272.280 +272.281 +272.282 +272.283 +272.284 +272.285 +272.286 +272.287 +273.276 +273.277 +273.278 +273.279 +273.280 +273.281 +273.282 +273.283 +273.284 +273.285 +273.286 +273.287 +274.276 +274.277 +274.278 +274.279 +274.280 +274.281 +274.282 +274.283 +274.284 +274.285 +274.286 +275.276 +275.277 +275.278 +275.279 +275.280 +275.281 +275.282 +275.283 +275.284 +275.285 +275.286 +276.276 +276.277 +276.278 +276.279 +276.280 +276.281 +276.282 +276.283 +276.284 +276.285 +276.286 +277.276 +277.277 +277.278 +277.279 +277.280 +277.281 +277.282 +277.283 +277.284 +277.285 +278.276 +278.277 +278.278 +278.279 +278.280 +278.281 +278.282 +278.283 +278.284 +278.285 +279.276 +279.277 +279.278 +279.279 +279.280 +279.281 +279.282 +279.283 +279.284 +279.285 +280.276 +280.277 +280.278 +280.279 +280.280 +280.281 +280.282 +280.283 +280.284 +280.285 +281.276 +281.277 +281.278 +281.279 +281.280 +281.281 +281.282 +281.283 +281.284 +282.276 +282.277 +282.278 +282.279 +282.280 +282.281 +282.282 +282.283 +282.284 +283.276 +283.277 +283.278 +283.279 +283.280 +283.281 +283.282 +283.283 +283.284 +284.276 +284.277 +284.278 +284.279 +284.280 +284.281 +284.282 +284.283 +285.276 +285.277 +285.278 +285.279 +285.280 +285.281 +285.282 +285.283 +286.276 +286.277 +286.278 +286.279 +286.280 +286.281 +286.282 +286.283 +287.276 +287.277 +287.278 +287.279 +287.280 +287.281 +287.282 +288.276 +288.277 +288.278 +288.279 +288.280 +288.281 +288.282 +289.276 +289.277 +289.278 +289.279 +289.280 +289.281 +289.282 +290.276 +290.277 +290.278 +290.279 +290.280 +290.281 +291.276 +291.277 +291.278 +291.279 +291.280 +291.281 +292.276 +292.277 +292.278 +292.279 +292.280 +292.281 +293.276 +293.277 +293.278 +293.279 +293.280 +294.276 +294.277 +294.278 +294.279 +294.280 +295.276 +295.277 +295.278 +295.279 +295.280 +296.276 +296.277 +296.278 +296.279 +297.276 +297.277 +297.278 +297.279 +298.276 +298.277 +298.278 +298.279 +299.276 +299.277 +299.278 +300.276 +300.277 +300.278 +301.276 +301.277 +301.278 +302.276 +302.277 +303.276 +303.277 +304.276 +304.277 +305.276 +306.276 +307.276 diff --git a/auxdir/CFIS/tiles_202510/tiles_P4.txt b/auxdir/CFIS/tiles_202510/tiles_P4.txt new file mode 100644 index 00000000..88f570ea --- /dev/null +++ b/auxdir/CFIS/tiles_202510/tiles_P4.txt @@ -0,0 +1,3196 @@ +174.294 +175.294 +176.293 +176.294 +177.293 +177.294 +178.292 +178.293 +178.294 +179.292 +179.293 +179.294 +180.291 +180.292 +180.293 +180.294 +181.291 +181.292 +181.293 +181.294 +182.291 +182.292 +182.293 +182.294 +183.290 +183.291 +183.292 +183.293 +183.294 +184.290 +184.292 +184.293 +184.294 +185.289 +185.290 +185.292 +185.293 +185.294 +186.289 +186.290 +186.292 +186.293 +186.294 +187.288 +187.289 +187.290 +187.292 +187.293 +187.294 +188.288 +188.289 +188.290 +188.292 +188.293 +189.288 +189.289 +189.290 +189.292 +189.293 +190.287 +190.288 +190.289 +190.290 +190.292 +190.293 +191.287 +191.288 +191.289 +191.290 +191.292 +192.285 +192.286 +192.287 +192.288 +192.289 +192.290 +192.292 +193.285 +193.286 +193.287 +193.288 +193.289 +193.290 +194.284 +194.285 +194.286 +194.287 +194.288 +194.289 +194.290 +195.284 +195.285 +195.286 +195.287 +195.288 +195.289 +195.290 +196.284 +196.285 +196.286 +196.287 +196.288 +196.289 +196.290 +197.283 +197.284 +197.285 +197.286 +197.287 +197.288 +197.289 +197.290 +198.283 +198.284 +198.285 +198.286 +198.287 +198.288 +198.289 +199.282 +199.283 +199.284 +199.285 +199.286 +199.287 +199.288 +199.289 +200.282 +200.283 +200.284 +200.285 +200.286 +200.287 +200.288 +200.289 +201.281 +201.282 +201.283 +201.284 +201.285 +201.286 +201.287 +201.288 +202.281 +202.282 +202.283 +202.284 +202.285 +202.286 +202.287 +202.288 +203.280 +203.281 +203.282 +203.283 +203.284 +203.285 +203.286 +203.287 +204.280 +204.281 +204.282 +204.283 +204.284 +204.285 +204.286 +204.287 +205.279 +205.280 +205.281 +205.282 +205.283 +205.284 +205.285 +205.286 +205.287 +206.279 +206.280 +206.281 +206.282 +206.283 +206.284 +206.285 +206.286 +207.278 +207.279 +207.280 +207.281 +207.282 +207.283 +207.284 +207.285 +207.286 +208.278 +208.279 +208.280 +208.281 +208.282 +208.283 +208.284 +208.285 +209.277 +209.278 +209.279 +209.280 +209.281 +209.282 +209.283 +209.284 +209.285 +210.277 +210.278 +210.279 +210.280 +210.281 +210.282 +210.283 +210.284 +211.276 +211.277 +211.278 +211.279 +211.280 +211.281 +211.282 +211.283 +211.284 +212.276 +212.277 +212.278 +212.279 +212.280 +212.281 +212.282 +212.283 +212.284 +213.275 +213.276 +213.277 +213.278 +213.279 +213.280 +213.281 +213.282 +213.283 +214.275 +214.276 +214.277 +214.278 +214.279 +214.280 +214.281 +214.282 +214.283 +215.274 +215.275 +215.276 +215.277 +215.278 +215.279 +215.280 +215.281 +215.282 +216.274 +216.275 +216.276 +216.277 +216.278 +216.279 +216.280 +216.281 +216.282 +217.273 +217.274 +217.275 +217.276 +217.277 +217.278 +217.279 +217.280 +217.281 +218.273 +218.274 +218.275 +218.276 +218.277 +218.278 +218.279 +218.280 +218.281 +219.272 +219.273 +219.274 +219.275 +219.276 +219.277 +219.278 +219.279 +219.280 +220.272 +220.273 +220.274 +220.275 +220.276 +220.277 +220.278 +220.279 +220.280 +221.271 +221.272 +221.273 +221.274 +221.275 +221.276 +221.277 +221.278 +221.279 +222.271 +222.272 +222.273 +222.274 +222.275 +222.276 +222.277 +222.278 +222.279 +223.270 +223.271 +223.272 +223.273 +223.274 +223.275 +223.276 +223.277 +223.278 +224.270 +224.271 +224.272 +224.273 +224.274 +224.275 +224.276 +224.277 +224.278 +225.269 +225.270 +225.271 +225.272 +225.273 +225.274 +225.275 +225.276 +225.277 +226.269 +226.270 +226.271 +226.272 +226.273 +226.274 +226.275 +226.276 +226.277 +227.268 +227.269 +227.270 +227.271 +227.272 +227.273 +227.274 +227.275 +227.276 +227.277 +228.268 +228.269 +228.270 +228.271 +228.272 +228.273 +228.274 +228.275 +228.276 +229.267 +229.268 +229.269 +229.270 +229.271 +229.272 +229.273 +229.274 +229.275 +229.276 +230.267 +230.268 +230.269 +230.270 +230.271 +230.272 +230.273 +230.274 +230.275 +231.266 +231.267 +231.268 +231.269 +231.270 +231.271 +231.272 +231.273 +231.274 +231.275 +232.266 +232.267 +232.268 +232.269 +232.270 +232.271 +232.272 +232.273 +232.274 +233.265 +233.266 +233.267 +233.268 +233.269 +233.270 +233.271 +233.272 +233.273 +234.265 +234.266 +234.267 +234.268 +234.269 +234.270 +234.271 +234.272 +234.273 +235.264 +235.265 +235.266 +235.267 +235.268 +235.269 +235.270 +235.271 +235.272 +236.263 +236.264 +236.265 +236.266 +236.267 +236.268 +236.269 +236.270 +236.271 +236.272 +237.263 +237.264 +237.265 +237.266 +237.267 +237.268 +237.269 +237.270 +237.271 +237.278 +238.262 +238.263 +238.264 +238.265 +238.266 +238.267 +238.268 +238.269 +238.270 +238.271 +238.278 +239.262 +239.263 +239.264 +239.265 +239.266 +239.267 +239.268 +239.269 +239.270 +239.277 +239.278 +240.261 +240.263 +240.264 +240.265 +240.266 +240.267 +240.268 +240.269 +240.270 +240.277 +240.278 +241.261 +241.262 +241.263 +241.264 +241.265 +241.266 +241.267 +241.268 +241.269 +241.270 +241.276 +241.277 +241.278 +242.260 +242.262 +242.263 +242.264 +242.265 +242.266 +242.267 +242.268 +242.269 +242.276 +242.277 +242.278 +243.261 +243.262 +243.263 +243.264 +243.265 +243.266 +243.267 +243.268 +243.269 +243.275 +243.276 +243.277 +243.278 +244.259 +244.260 +244.261 +244.262 +244.263 +244.264 +244.265 +244.266 +244.267 +244.268 +244.269 +244.274 +244.275 +244.276 +244.277 +244.278 +245.258 +245.259 +245.260 +245.261 +245.262 +245.263 +245.264 +245.265 +245.266 +245.267 +245.268 +245.269 +245.274 +245.275 +245.276 +245.277 +245.278 +246.258 +246.259 +246.260 +246.261 +246.262 +246.263 +246.264 +246.265 +246.266 +246.267 +246.268 +246.269 +246.273 +246.274 +246.275 +246.276 +246.277 +246.278 +247.257 +247.258 +247.259 +247.260 +247.261 +247.262 +247.263 +247.264 +247.265 +247.266 +247.267 +247.268 +247.269 +247.273 +247.274 +247.275 +247.276 +247.277 +247.278 +248.258 +248.259 +248.260 +248.261 +248.262 +248.263 +248.264 +248.265 +248.266 +248.267 +248.268 +248.269 +248.272 +248.273 +248.274 +248.275 +248.276 +248.277 +248.278 +249.257 +249.258 +249.259 +249.260 +249.261 +249.262 +249.263 +249.264 +249.265 +249.266 +249.267 +249.268 +249.269 +249.272 +249.273 +249.274 +249.275 +249.276 +249.277 +249.278 +250.257 +250.258 +250.259 +250.260 +250.261 +250.262 +250.263 +250.264 +250.265 +250.266 +250.267 +250.268 +250.269 +250.271 +250.272 +250.273 +250.274 +250.275 +250.276 +250.277 +251.256 +251.257 +251.258 +251.259 +251.260 +251.261 +251.262 +251.263 +251.264 +251.265 +251.266 +251.267 +251.268 +251.269 +251.271 +251.272 +251.273 +251.274 +251.275 +251.276 +251.277 +252.256 +252.257 +252.258 +252.259 +252.260 +252.261 +252.262 +252.263 +252.264 +252.265 +252.266 +252.267 +252.268 +252.269 +252.271 +252.272 +252.273 +252.274 +252.275 +252.276 +253.255 +253.256 +253.257 +253.258 +253.259 +253.260 +253.261 +253.262 +253.263 +253.264 +253.265 +253.266 +253.267 +253.268 +253.269 +253.270 +253.271 +253.272 +253.273 +253.274 +253.275 +253.276 +254.254 +254.255 +254.256 +254.257 +254.258 +254.259 +254.260 +254.261 +254.262 +254.263 +254.264 +254.265 +254.266 +254.267 +254.268 +254.269 +254.270 +254.271 +254.272 +254.273 +254.274 +254.275 +254.276 +255.254 +255.255 +255.256 +255.257 +255.258 +255.259 +255.260 +255.261 +255.262 +255.263 +255.264 +255.265 +255.266 +255.267 +255.268 +255.269 +255.270 +255.271 +255.272 +255.273 +255.274 +255.275 +256.253 +256.254 +256.255 +256.256 +256.257 +256.258 +256.259 +256.260 +256.261 +256.262 +256.263 +256.264 +256.265 +256.266 +256.267 +256.268 +256.269 +256.270 +256.271 +256.272 +256.273 +256.274 +256.275 +257.252 +257.253 +257.254 +257.255 +257.256 +257.257 +257.258 +257.259 +257.260 +257.261 +257.262 +257.263 +257.264 +257.265 +257.266 +257.267 +257.268 +257.269 +257.270 +257.271 +257.272 +257.273 +257.274 +257.275 +258.252 +258.253 +258.254 +258.255 +258.256 +258.257 +258.258 +258.259 +258.260 +258.261 +258.262 +258.263 +258.264 +258.265 +258.266 +258.267 +258.268 +258.269 +258.270 +258.271 +258.272 +258.273 +258.274 +258.275 +259.251 +259.252 +259.253 +259.254 +259.255 +259.256 +259.257 +259.258 +259.259 +259.260 +259.261 +259.262 +259.263 +259.264 +259.265 +259.266 +259.267 +259.268 +259.269 +259.270 +259.271 +259.272 +259.273 +259.274 +259.275 +260.249 +260.251 +260.252 +260.253 +260.254 +260.255 +260.256 +260.257 +260.258 +260.259 +260.260 +260.261 +260.262 +260.263 +260.264 +260.265 +260.266 +260.267 +260.268 +260.269 +260.270 +260.271 +260.272 +260.273 +260.274 +260.275 +261.250 +261.251 +261.252 +261.253 +261.254 +261.255 +261.256 +261.257 +261.258 +261.259 +261.260 +261.261 +261.262 +261.263 +261.264 +261.265 +261.266 +261.267 +261.268 +261.269 +261.270 +261.271 +261.272 +261.273 +261.274 +261.275 +262.250 +262.251 +262.252 +262.253 +262.254 +262.255 +262.256 +262.257 +262.258 +262.259 +262.260 +262.261 +262.262 +262.263 +262.264 +262.265 +262.266 +262.267 +262.268 +262.269 +262.270 +262.271 +262.272 +262.273 +262.274 +262.275 +263.249 +263.250 +263.251 +263.252 +263.253 +263.254 +263.255 +263.256 +263.257 +263.258 +263.259 +263.260 +263.261 +263.262 +263.263 +263.264 +263.265 +263.266 +263.267 +263.268 +263.269 +263.270 +263.271 +263.272 +263.273 +263.274 +263.275 +264.249 +264.250 +264.251 +264.252 +264.253 +264.254 +264.255 +264.256 +264.257 +264.258 +264.259 +264.260 +264.261 +264.262 +264.263 +264.264 +264.265 +264.266 +264.267 +264.268 +264.269 +264.270 +264.271 +264.272 +264.273 +264.274 +264.275 +265.248 +265.249 +265.250 +265.251 +265.252 +265.253 +265.254 +265.255 +265.256 +265.257 +265.258 +265.259 +265.260 +265.261 +265.262 +265.263 +265.264 +265.265 +265.266 +265.267 +265.268 +265.269 +265.270 +265.271 +265.272 +265.273 +265.274 +265.275 +266.247 +266.248 +266.249 +266.250 +266.251 +266.252 +266.253 +266.254 +266.255 +266.256 +266.257 +266.258 +266.259 +266.260 +266.261 +266.262 +266.263 +266.264 +266.265 +266.266 +266.267 +266.268 +266.269 +266.270 +266.271 +266.272 +266.273 +266.274 +266.275 +267.246 +267.247 +267.248 +267.249 +267.250 +267.251 +267.252 +267.253 +267.254 +267.255 +267.256 +267.257 +267.258 +267.259 +267.260 +267.261 +267.262 +267.263 +267.264 +267.265 +267.266 +267.267 +267.268 +267.269 +267.270 +267.271 +267.272 +267.273 +267.274 +267.275 +268.246 +268.247 +268.248 +268.249 +268.250 +268.251 +268.252 +268.253 +268.254 +268.255 +268.256 +268.257 +268.258 +268.259 +268.260 +268.261 +268.262 +268.263 +268.264 +268.265 +268.266 +268.267 +268.268 +268.269 +268.270 +268.271 +268.272 +268.273 +268.274 +268.275 +269.245 +269.246 +269.247 +269.248 +269.249 +269.250 +269.251 +269.252 +269.253 +269.254 +269.255 +269.256 +269.257 +269.258 +269.259 +269.260 +269.261 +269.262 +269.263 +269.264 +269.265 +269.266 +269.267 +269.268 +269.269 +269.270 +269.271 +269.272 +269.273 +269.274 +269.275 +270.244 +270.245 +270.246 +270.247 +270.248 +270.249 +270.250 +270.251 +270.252 +270.253 +270.254 +270.255 +270.256 +270.257 +270.258 +270.259 +270.260 +270.261 +270.262 +270.263 +270.264 +270.265 +270.266 +270.267 +270.268 +270.269 +270.270 +270.271 +270.272 +270.273 +270.274 +270.275 +271.244 +271.245 +271.246 +271.247 +271.248 +271.249 +271.250 +271.251 +271.252 +271.253 +271.254 +271.255 +271.256 +271.257 +271.258 +271.259 +271.260 +271.261 +271.262 +271.263 +271.264 +271.265 +271.266 +271.267 +271.268 +271.269 +271.270 +271.271 +271.272 +271.273 +271.274 +271.275 +272.243 +272.244 +272.245 +272.246 +272.247 +272.248 +272.249 +272.250 +272.251 +272.252 +272.253 +272.254 +272.255 +272.256 +272.257 +272.258 +272.259 +272.260 +272.261 +272.262 +272.263 +272.264 +272.265 +272.266 +272.267 +272.268 +272.269 +272.270 +272.271 +272.272 +272.273 +272.274 +272.275 +273.242 +273.243 +273.244 +273.245 +273.246 +273.247 +273.248 +273.249 +273.250 +273.251 +273.252 +273.253 +273.254 +273.255 +273.256 +273.257 +273.258 +273.259 +273.260 +273.261 +273.262 +273.263 +273.264 +273.265 +273.266 +273.267 +273.268 +273.269 +273.270 +273.271 +273.272 +273.273 +273.274 +274.241 +274.242 +274.243 +274.244 +274.245 +274.246 +274.247 +274.248 +274.249 +274.250 +274.251 +274.252 +274.253 +274.254 +274.255 +274.256 +274.257 +274.258 +274.259 +274.260 +274.261 +274.262 +274.263 +274.264 +274.265 +274.266 +274.267 +274.268 +274.269 +274.270 +274.271 +274.272 +274.273 +275.241 +275.242 +275.243 +275.244 +275.245 +275.246 +275.247 +275.248 +275.249 +275.250 +275.251 +275.252 +275.253 +275.254 +275.255 +275.256 +275.257 +275.258 +275.259 +275.260 +275.261 +275.262 +275.263 +275.264 +275.265 +275.266 +275.267 +275.268 +275.269 +275.270 +275.271 +275.272 +276.240 +276.241 +276.242 +276.243 +276.244 +276.245 +276.246 +276.247 +276.248 +276.249 +276.250 +276.251 +276.252 +276.253 +276.254 +276.255 +276.256 +276.257 +276.258 +276.259 +276.260 +276.261 +276.262 +276.263 +276.264 +276.265 +276.266 +276.267 +276.268 +276.269 +276.270 +276.271 +276.272 +277.240 +277.241 +277.242 +277.243 +277.244 +277.245 +277.246 +277.247 +277.248 +277.249 +277.250 +277.251 +277.252 +277.253 +277.254 +277.255 +277.256 +277.257 +277.258 +277.259 +277.260 +277.261 +277.262 +277.263 +277.264 +277.265 +277.266 +277.267 +277.268 +277.269 +277.270 +277.271 +278.239 +278.240 +278.241 +278.242 +278.243 +278.244 +278.245 +278.246 +278.247 +278.248 +278.249 +278.250 +278.251 +278.252 +278.253 +278.254 +278.255 +278.256 +278.257 +278.258 +278.259 +278.260 +278.261 +278.262 +278.263 +278.264 +278.265 +278.266 +278.267 +278.268 +278.269 +278.270 +278.271 +279.239 +279.240 +279.241 +279.242 +279.243 +279.244 +279.245 +279.246 +279.247 +279.248 +279.249 +279.250 +279.251 +279.252 +279.253 +279.254 +279.255 +279.256 +279.257 +279.258 +279.259 +279.260 +279.261 +279.262 +279.263 +279.264 +279.265 +279.266 +279.267 +279.268 +279.269 +279.270 +280.238 +280.239 +280.240 +280.241 +280.242 +280.243 +280.244 +280.245 +280.246 +280.247 +280.248 +280.249 +280.250 +280.251 +280.252 +280.253 +280.254 +280.255 +280.256 +280.257 +280.258 +280.259 +280.260 +280.261 +280.262 +280.263 +280.264 +280.265 +280.266 +280.267 +280.268 +280.269 +280.270 +281.238 +281.239 +281.240 +281.241 +281.242 +281.243 +281.244 +281.245 +281.246 +281.247 +281.248 +281.249 +281.250 +281.251 +281.252 +281.253 +281.254 +281.255 +281.256 +281.257 +281.258 +281.259 +281.260 +281.261 +281.262 +281.263 +281.264 +281.265 +281.266 +281.267 +281.268 +281.269 +281.270 +282.238 +282.239 +282.240 +282.241 +282.242 +282.243 +282.244 +282.245 +282.246 +282.247 +282.248 +282.249 +282.250 +282.251 +282.252 +282.253 +282.254 +282.255 +282.256 +282.257 +282.258 +282.259 +282.260 +282.261 +282.262 +282.263 +282.264 +282.265 +282.266 +282.267 +282.268 +282.269 +282.270 +283.238 +283.239 +283.240 +283.241 +283.242 +283.243 +283.244 +283.245 +283.246 +283.247 +283.248 +283.249 +283.250 +283.251 +283.252 +283.253 +283.254 +283.255 +283.256 +283.257 +283.258 +283.259 +283.260 +283.261 +283.262 +283.263 +283.264 +283.265 +283.266 +283.267 +283.268 +283.269 +283.270 +284.238 +284.239 +284.240 +284.241 +284.242 +284.243 +284.244 +284.245 +284.246 +284.247 +284.248 +284.249 +284.250 +284.251 +284.252 +284.253 +284.254 +284.255 +284.256 +284.257 +284.258 +284.259 +284.260 +284.261 +284.262 +284.263 +284.264 +284.265 +284.266 +284.267 +284.268 +284.269 +284.270 +285.238 +285.239 +285.240 +285.241 +285.242 +285.243 +285.244 +285.245 +285.246 +285.247 +285.248 +285.249 +285.250 +285.251 +285.252 +285.253 +285.254 +285.255 +285.256 +285.257 +285.258 +285.259 +285.260 +285.261 +285.262 +285.263 +285.264 +285.265 +285.266 +285.267 +285.268 +285.269 +285.270 +286.238 +286.239 +286.240 +286.241 +286.242 +286.243 +286.244 +286.245 +286.246 +286.247 +286.248 +286.249 +286.250 +286.251 +286.252 +286.253 +286.254 +286.255 +286.256 +286.257 +286.258 +286.259 +286.260 +286.261 +286.262 +286.263 +286.264 +286.265 +286.266 +286.267 +286.268 +286.269 +286.270 +287.238 +287.239 +287.240 +287.241 +287.242 +287.243 +287.244 +287.245 +287.246 +287.247 +287.248 +287.249 +287.250 +287.251 +287.252 +287.253 +287.254 +287.255 +287.256 +287.257 +287.258 +287.259 +287.260 +287.261 +287.262 +287.263 +287.264 +287.265 +287.266 +287.267 +287.268 +287.269 +287.270 +288.238 +288.239 +288.240 +288.241 +288.242 +288.243 +288.244 +288.245 +288.246 +288.247 +288.248 +288.249 +288.250 +288.251 +288.252 +288.253 +288.254 +288.255 +288.256 +288.257 +288.258 +288.259 +288.260 +288.261 +288.262 +288.263 +288.264 +288.265 +288.266 +288.267 +288.268 +288.269 +288.270 +289.238 +289.239 +289.240 +289.241 +289.242 +289.243 +289.244 +289.245 +289.246 +289.247 +289.248 +289.249 +289.250 +289.251 +289.252 +289.253 +289.254 +289.255 +289.256 +289.257 +289.258 +289.259 +289.260 +289.261 +289.262 +289.263 +289.264 +289.265 +289.266 +289.267 +289.268 +289.269 +289.270 +290.238 +290.239 +290.240 +290.241 +290.242 +290.243 +290.244 +290.245 +290.246 +290.247 +290.248 +290.249 +290.250 +290.251 +290.252 +290.253 +290.254 +290.255 +290.256 +290.257 +290.258 +290.259 +290.260 +290.261 +290.262 +290.263 +290.264 +290.265 +290.266 +290.267 +290.268 +290.269 +290.270 +290.271 +291.238 +291.239 +291.240 +291.241 +291.242 +291.243 +291.244 +291.245 +291.246 +291.247 +291.248 +291.249 +291.250 +291.251 +291.252 +291.253 +291.254 +291.255 +291.256 +291.257 +291.258 +291.259 +291.260 +291.261 +291.262 +291.263 +291.264 +291.265 +291.266 +291.267 +291.268 +291.269 +291.270 +292.238 +292.239 +292.240 +292.241 +292.242 +292.243 +292.244 +292.245 +292.246 +292.247 +292.248 +292.249 +292.250 +292.251 +292.252 +292.253 +292.254 +292.255 +292.256 +292.257 +292.258 +292.259 +292.260 +292.261 +292.262 +292.263 +292.264 +292.265 +292.266 +292.267 +292.268 +292.269 +292.270 +293.238 +293.239 +293.240 +293.241 +293.242 +293.243 +293.244 +293.245 +293.246 +293.247 +293.248 +293.249 +293.250 +293.251 +293.252 +293.253 +293.254 +293.255 +293.256 +293.257 +293.258 +293.259 +293.260 +293.261 +293.262 +293.263 +293.264 +293.265 +293.266 +293.267 +293.268 +293.269 +294.238 +294.239 +294.240 +294.241 +294.242 +294.243 +294.244 +294.245 +294.246 +294.247 +294.248 +294.249 +294.250 +294.251 +294.252 +294.253 +294.254 +294.255 +294.256 +294.257 +294.258 +294.259 +294.260 +294.261 +294.262 +294.263 +294.264 +294.265 +294.266 +294.267 +294.268 +294.269 +295.238 +295.239 +295.240 +295.241 +295.242 +295.243 +295.244 +295.245 +295.246 +295.247 +295.248 +295.249 +295.250 +295.251 +295.252 +295.253 +295.254 +295.255 +295.256 +295.257 +295.258 +295.259 +295.260 +295.261 +295.262 +295.263 +295.264 +295.265 +295.266 +295.267 +295.268 +295.269 +296.238 +296.239 +296.240 +296.241 +296.242 +296.243 +296.244 +296.245 +296.246 +296.247 +296.248 +296.249 +296.250 +296.251 +296.252 +296.253 +296.254 +296.255 +296.256 +296.257 +296.258 +296.259 +296.260 +296.261 +296.262 +296.263 +296.264 +296.265 +296.266 +296.267 +296.268 +297.238 +297.239 +297.240 +297.241 +297.242 +297.243 +297.244 +297.245 +297.246 +297.247 +297.248 +297.249 +297.250 +297.251 +297.252 +297.253 +297.254 +297.255 +297.256 +297.257 +297.258 +297.259 +297.260 +297.261 +297.262 +297.263 +297.264 +297.265 +297.266 +297.267 +297.268 +298.238 +298.239 +298.240 +298.241 +298.242 +298.243 +298.244 +298.245 +298.246 +298.247 +298.248 +298.249 +298.250 +298.251 +298.252 +298.253 +298.254 +298.255 +298.256 +298.257 +298.258 +298.259 +298.260 +298.261 +298.262 +298.263 +298.264 +298.265 +298.266 +298.267 +299.238 +299.239 +299.240 +299.241 +299.242 +299.243 +299.244 +299.245 +299.246 +299.247 +299.248 +299.249 +299.250 +299.251 +299.252 +299.253 +299.254 +299.255 +299.256 +299.257 +299.258 +299.259 +299.260 +299.261 +299.262 +299.263 +299.264 +299.265 +299.266 +299.267 +300.238 +300.239 +300.240 +300.241 +300.242 +300.243 +300.244 +300.245 +300.246 +300.247 +300.248 +300.249 +300.250 +300.251 +300.252 +300.253 +300.254 +300.255 +300.256 +300.257 +300.258 +300.259 +300.260 +300.261 +300.262 +300.263 +300.264 +300.265 +300.266 +300.267 +301.238 +301.239 +301.240 +301.241 +301.242 +301.243 +301.244 +301.245 +301.246 +301.247 +301.248 +301.249 +301.250 +301.251 +301.252 +301.253 +301.254 +301.255 +301.256 +301.257 +301.258 +301.259 +301.260 +301.261 +301.262 +301.263 +301.264 +301.265 +301.266 +302.238 +302.239 +302.240 +302.241 +302.242 +302.243 +302.244 +302.245 +302.246 +302.247 +302.248 +302.249 +302.250 +302.251 +302.252 +302.253 +302.254 +302.255 +302.256 +302.257 +302.258 +302.259 +302.260 +302.261 +302.262 +302.263 +302.264 +302.265 +302.266 +303.238 +303.239 +303.240 +303.241 +303.242 +303.243 +303.244 +303.245 +303.246 +303.247 +303.248 +303.249 +303.250 +303.251 +303.252 +303.253 +303.254 +303.255 +303.256 +303.257 +303.258 +303.259 +303.260 +303.261 +303.262 +303.263 +303.264 +303.265 +304.238 +304.239 +304.240 +304.241 +304.242 +304.243 +304.244 +304.245 +304.246 +304.247 +304.248 +304.249 +304.250 +304.251 +304.252 +304.253 +304.254 +304.255 +304.256 +304.257 +304.258 +304.259 +304.260 +304.261 +304.262 +304.263 +304.264 +304.265 +305.238 +305.239 +305.240 +305.241 +305.242 +305.243 +305.244 +305.245 +305.246 +305.247 +305.248 +305.249 +305.250 +305.251 +305.252 +305.253 +305.254 +305.255 +305.256 +305.257 +305.258 +305.259 +305.260 +305.261 +305.262 +305.263 +305.264 +306.238 +306.239 +306.240 +306.241 +306.242 +306.243 +306.244 +306.245 +306.246 +306.247 +306.248 +306.249 +306.250 +306.251 +306.252 +306.253 +306.254 +306.255 +306.256 +306.257 +306.258 +306.259 +306.260 +306.261 +306.262 +306.263 +306.264 +307.238 +307.239 +307.240 +307.241 +307.242 +307.243 +307.244 +307.245 +307.246 +307.247 +307.248 +307.249 +307.250 +307.251 +307.252 +307.253 +307.254 +307.255 +307.256 +307.257 +307.258 +307.259 +307.260 +307.261 +307.262 +307.263 +308.238 +308.239 +308.240 +308.241 +308.242 +308.243 +308.244 +308.245 +308.246 +308.247 +308.248 +308.249 +308.250 +308.251 +308.252 +308.253 +308.254 +308.255 +308.257 +308.258 +308.259 +308.260 +308.261 +308.262 +308.263 +309.238 +309.239 +309.240 +309.241 +309.242 +309.243 +309.244 +309.245 +309.246 +309.247 +309.248 +309.249 +309.250 +309.251 +309.252 +309.253 +309.254 +309.255 +309.257 +309.258 +309.259 +309.260 +309.261 +309.262 +309.263 +310.238 +310.239 +310.240 +310.241 +310.242 +310.243 +310.244 +310.245 +310.246 +310.247 +310.248 +310.249 +310.250 +310.251 +310.252 +310.253 +310.254 +310.255 +310.257 +310.258 +310.259 +310.260 +310.261 +310.262 +311.238 +311.239 +311.240 +311.241 +311.242 +311.243 +311.244 +311.245 +311.246 +311.247 +311.248 +311.249 +311.250 +311.251 +311.252 +311.253 +311.254 +311.255 +311.257 +311.258 +311.259 +311.260 +311.261 +312.238 +312.239 +312.240 +312.241 +312.242 +312.243 +312.244 +312.245 +312.246 +312.247 +312.248 +312.249 +312.250 +312.251 +312.252 +312.253 +312.254 +312.255 +312.257 +312.258 +312.259 +312.260 +312.261 +313.238 +313.239 +313.240 +313.241 +313.242 +313.243 +313.244 +313.245 +313.246 +313.247 +313.248 +313.249 +313.250 +313.251 +313.252 +313.253 +313.254 +313.255 +313.257 +313.258 +313.259 +314.238 +314.239 +314.240 +314.241 +314.242 +314.243 +314.244 +314.245 +314.246 +314.247 +314.248 +314.249 +314.250 +314.251 +314.252 +314.253 +314.254 +314.255 +314.257 +314.258 +314.259 +315.238 +315.239 +315.240 +315.241 +315.242 +315.243 +315.244 +315.245 +315.246 +315.247 +315.248 +315.249 +315.250 +315.251 +315.252 +315.253 +315.254 +315.255 +315.257 +315.258 +315.259 +316.238 +316.239 +316.240 +316.241 +316.242 +316.243 +316.244 +316.245 +316.246 +316.247 +316.248 +316.249 +316.250 +316.251 +316.252 +316.253 +316.254 +316.255 +316.257 +316.258 +317.238 +317.239 +317.240 +317.241 +317.242 +317.243 +317.244 +317.245 +317.246 +317.247 +317.248 +317.249 +317.250 +317.251 +317.252 +317.253 +317.254 +317.255 +317.257 +318.238 +318.239 +318.240 +318.241 +318.242 +318.243 +318.244 +318.245 +318.246 +318.247 +318.248 +318.249 +318.250 +318.251 +318.252 +318.253 +318.254 +318.255 +318.257 +319.238 +319.239 +319.240 +319.241 +319.242 +319.243 +319.244 +319.245 +319.246 +319.247 +319.248 +319.249 +319.250 +319.251 +319.252 +319.253 +319.254 +319.255 +320.238 +320.239 +320.240 +320.241 +320.242 +320.243 +320.244 +320.245 +320.246 +320.247 +320.248 +320.249 +320.250 +320.251 +320.252 +320.253 +320.254 +320.255 +321.238 +321.239 +321.240 +321.241 +321.242 +321.243 +321.244 +321.245 +321.246 +321.247 +321.248 +321.249 +321.250 +321.251 +321.252 +321.253 +321.254 +321.255 +322.238 +322.239 +322.240 +322.241 +322.242 +322.243 +322.244 +322.245 +322.246 +322.247 +322.248 +322.249 +322.250 +322.251 +322.252 +322.253 +322.254 +323.238 +323.239 +323.240 +323.241 +323.242 +323.243 +323.244 +323.245 +323.246 +323.247 +323.248 +323.249 +323.250 +323.251 +323.252 +323.253 +323.254 +324.238 +324.239 +324.240 +324.241 +324.242 +324.243 +324.244 +324.245 +324.246 +324.247 +324.248 +324.249 +324.250 +324.251 +324.252 +324.253 +325.238 +325.239 +325.240 +325.241 +325.242 +325.243 +325.244 +325.245 +325.246 +325.247 +325.248 +325.249 +325.250 +325.251 +325.252 +325.253 +326.238 +326.239 +326.240 +326.241 +326.242 +326.243 +326.244 +326.245 +326.246 +326.247 +326.248 +326.249 +326.250 +326.251 +326.252 +327.238 +327.239 +327.240 +327.241 +327.242 +327.243 +327.244 +327.245 +327.246 +327.247 +327.248 +327.249 +327.250 +327.251 +327.252 +328.238 +328.239 +328.240 +328.241 +328.242 +328.243 +328.244 +328.245 +328.246 +328.247 +328.248 +328.249 +328.250 +328.251 +329.238 +329.239 +329.240 +329.241 +329.242 +329.243 +329.244 +329.245 +329.246 +329.247 +329.248 +329.249 +329.250 +329.251 +330.238 +330.239 +330.240 +330.241 +330.242 +330.243 +330.244 +330.245 +330.246 +330.247 +330.248 +330.249 +330.250 +331.238 +331.239 +331.240 +331.241 +331.242 +331.243 +331.244 +331.245 +331.246 +331.247 +331.248 +331.249 +331.250 +332.238 +332.239 +332.240 +332.241 +332.242 +332.243 +332.244 +332.245 +332.246 +332.247 +332.248 +332.249 +333.238 +333.239 +333.240 +333.241 +333.242 +333.243 +333.244 +333.245 +333.246 +333.247 +333.248 +333.249 +334.238 +334.239 +334.240 +334.241 +334.242 +334.243 +334.244 +334.245 +334.246 +334.247 +334.248 +335.238 +335.239 +335.240 +335.241 +335.242 +335.243 +335.244 +335.245 +335.246 +335.247 +336.238 +336.239 +336.240 +336.241 +336.242 +336.243 +336.244 +336.245 +336.246 +336.247 +337.238 +337.239 +337.240 +337.241 +337.242 +337.243 +337.244 +337.245 +337.246 +338.238 +338.239 +338.240 +338.241 +338.242 +338.243 +338.244 +338.245 +339.238 +339.239 +339.240 +339.241 +339.242 +339.243 +339.244 +339.245 +340.238 +340.239 +340.240 +340.241 +340.242 +340.243 +340.244 +340.245 +341.238 +341.239 +341.240 +341.241 +341.242 +341.243 +341.244 +341.245 +342.238 +342.239 +342.240 +342.241 +342.242 +342.243 +342.244 +342.245 +343.238 +343.239 +343.240 +343.241 +343.242 +343.243 +343.244 +343.245 +343.250 +344.238 +344.239 +344.240 +344.241 +344.242 +344.243 +344.244 +344.245 +344.250 +345.238 +345.239 +345.240 +345.241 +345.242 +345.243 +345.244 +345.245 +345.249 +345.250 +346.238 +346.239 +346.240 +346.241 +346.242 +346.243 +346.244 +346.245 +346.248 +346.249 +346.250 +347.238 +347.239 +347.240 +347.241 +347.242 +347.243 +347.244 +347.245 +347.247 +347.248 +347.249 +347.250 +348.239 +348.240 +348.241 +348.242 +348.243 +348.244 +348.245 +348.246 +348.247 +348.248 +348.249 +348.250 +349.239 +349.240 +349.241 +349.242 +349.243 +349.244 +349.245 +349.246 +349.247 +349.248 +349.249 +349.250 +350.239 +350.240 +350.241 +350.242 +350.243 +350.244 +350.245 +350.246 +350.247 +350.248 +350.249 +350.250 +351.239 +351.240 +351.241 +351.242 +351.243 +351.244 +351.245 +351.246 +351.247 +351.248 +351.249 +351.250 +352.239 +352.240 +352.241 +352.242 +352.243 +352.244 +352.245 +352.246 +352.247 +352.248 +352.249 +352.250 +353.239 +353.240 +353.241 +353.242 +353.243 +353.244 +353.245 +353.246 +353.247 +353.248 +353.249 +353.250 +354.239 +354.240 +354.241 +354.242 +354.243 +354.244 +354.245 +354.246 +354.247 +354.248 +354.249 +354.250 +355.239 +355.240 +355.241 +355.242 +355.243 +355.244 +355.245 +355.246 +355.247 +355.248 +355.249 +355.250 +356.239 +356.240 +356.241 +356.242 +356.243 +356.244 +356.245 +356.246 +356.247 +356.248 +356.249 +356.250 +357.239 +357.240 +357.241 +357.242 +357.243 +357.244 +357.245 +357.246 +357.247 +357.248 +357.249 +357.250 +358.239 +358.240 +358.241 +358.242 +358.243 +358.244 +358.245 +358.246 +358.247 +358.248 +358.249 +359.239 +359.240 +359.241 +359.242 +359.243 +359.244 +359.245 +359.246 +359.247 +359.248 +359.249 +360.239 +360.240 +360.241 +360.242 +360.243 +360.244 +360.245 +360.246 +360.247 +360.248 +361.239 +361.240 +361.241 +361.242 +361.243 +361.244 +361.245 +361.246 +361.247 +361.248 +362.238 +362.239 +362.240 +362.241 +362.242 +362.243 +362.244 +362.245 +362.246 +362.247 +363.238 +363.239 +363.240 +363.241 +363.242 +363.243 +363.244 +363.245 +363.246 +363.247 +364.238 +364.239 +364.240 +364.241 +364.242 +364.243 +364.244 +364.245 +364.246 +365.238 +365.239 +365.240 +365.241 +365.242 +365.243 +365.244 +365.245 +366.238 +366.239 +366.240 +366.241 +366.242 +366.243 +366.244 +366.245 +367.238 +367.239 +367.240 +367.241 +367.242 +367.243 +367.244 +368.238 +368.239 +368.240 +368.241 +368.242 +368.243 +368.244 +369.238 +369.239 +369.240 +369.241 +369.242 +369.243 +370.238 +370.239 +370.240 +370.241 +370.242 +371.238 +371.239 +371.240 +371.241 +372.238 +372.239 +372.240 +372.241 +373.238 +373.239 +373.240 +374.238 +374.239 +374.240 +375.238 +375.239 +376.238 diff --git a/auxdir/CFIS/tiles_202510/tiles_P5.txt b/auxdir/CFIS/tiles_202510/tiles_P5.txt new file mode 100644 index 00000000..644c04db --- /dev/null +++ b/auxdir/CFIS/tiles_202510/tiles_P5.txt @@ -0,0 +1,3087 @@ +283.275 +284.274 +284.275 +285.274 +285.275 +286.273 +286.274 +286.275 +287.273 +287.274 +287.275 +288.272 +288.273 +288.274 +288.275 +289.272 +289.273 +289.274 +289.275 +290.272 +290.273 +290.274 +290.275 +291.271 +291.272 +291.273 +291.274 +291.275 +292.271 +292.272 +292.273 +292.274 +292.275 +293.270 +293.271 +293.272 +293.273 +293.274 +293.275 +294.270 +294.271 +294.272 +294.273 +294.274 +294.275 +295.270 +295.271 +295.272 +295.273 +295.274 +295.275 +296.269 +296.270 +296.271 +296.272 +296.273 +296.274 +296.275 +297.269 +297.270 +297.271 +297.272 +297.273 +297.274 +297.275 +298.268 +298.269 +298.270 +298.271 +298.272 +298.273 +298.274 +298.275 +299.268 +299.269 +299.270 +299.271 +299.272 +299.273 +299.274 +299.275 +300.268 +300.269 +300.270 +300.271 +300.272 +300.273 +300.274 +300.275 +301.268 +301.269 +301.270 +301.271 +301.272 +301.273 +301.274 +301.275 +302.268 +302.269 +302.270 +302.271 +302.272 +302.273 +302.274 +302.275 +303.268 +303.269 +303.270 +303.271 +303.272 +303.273 +303.274 +303.275 +304.268 +304.269 +304.270 +304.271 +304.272 +304.273 +304.274 +304.275 +305.268 +305.269 +305.270 +305.271 +305.272 +305.273 +305.274 +305.275 +306.268 +306.269 +306.270 +306.271 +306.272 +306.273 +306.274 +306.275 +307.268 +307.269 +307.270 +307.271 +307.272 +307.273 +307.274 +307.275 +308.268 +308.269 +308.270 +308.271 +308.272 +308.273 +308.274 +308.275 +309.268 +309.269 +309.270 +309.271 +309.272 +309.273 +309.274 +309.275 +310.268 +310.269 +310.270 +310.271 +310.272 +310.273 +310.274 +310.275 +311.268 +311.269 +311.270 +311.271 +311.272 +311.273 +311.274 +311.275 +312.267 +312.268 +312.269 +312.270 +312.271 +312.272 +312.273 +312.274 +312.275 +313.267 +313.268 +313.269 +313.270 +313.271 +313.272 +313.273 +313.274 +313.275 +314.266 +314.267 +314.268 +314.269 +314.270 +314.271 +314.272 +314.273 +314.274 +314.275 +315.266 +315.267 +315.268 +315.269 +315.270 +315.271 +315.272 +315.273 +315.274 +315.275 +316.266 +316.267 +316.268 +316.269 +316.270 +316.271 +316.272 +316.273 +316.274 +316.275 +317.265 +317.266 +317.267 +317.268 +317.269 +317.270 +317.271 +317.272 +317.273 +317.274 +317.275 +318.265 +318.266 +318.267 +318.268 +318.269 +318.270 +318.271 +318.272 +318.273 +318.274 +318.275 +319.264 +319.265 +319.266 +319.267 +319.268 +319.269 +319.270 +319.271 +319.272 +319.273 +319.274 +319.275 +320.264 +320.265 +320.266 +320.267 +320.268 +320.269 +320.270 +320.271 +320.272 +320.273 +320.274 +320.275 +321.263 +321.264 +321.265 +321.266 +321.267 +321.268 +321.269 +321.270 +321.271 +321.272 +321.273 +321.274 +321.275 +322.263 +322.264 +322.265 +322.266 +322.267 +322.268 +322.269 +322.270 +322.271 +322.272 +322.273 +322.274 +322.275 +323.261 +323.262 +323.263 +323.264 +323.265 +323.266 +323.267 +323.268 +323.269 +323.270 +323.271 +323.272 +323.273 +323.274 +323.275 +324.261 +324.262 +324.263 +324.264 +324.265 +324.266 +324.267 +324.268 +324.269 +324.270 +324.271 +324.272 +324.273 +324.274 +324.275 +325.260 +325.261 +325.262 +325.263 +325.264 +325.265 +325.266 +325.267 +325.268 +325.269 +325.270 +325.271 +325.272 +325.273 +325.274 +325.275 +326.260 +326.261 +326.262 +326.263 +326.264 +326.265 +326.266 +326.267 +326.268 +326.269 +326.270 +326.271 +326.272 +326.273 +326.274 +326.275 +327.259 +327.260 +327.261 +327.262 +327.263 +327.264 +327.265 +327.266 +327.267 +327.268 +327.269 +327.270 +327.271 +327.272 +327.273 +327.274 +327.275 +328.259 +328.260 +328.261 +328.262 +328.263 +328.264 +328.265 +328.266 +328.267 +328.268 +328.269 +328.270 +328.271 +328.272 +328.273 +328.274 +328.275 +329.258 +329.259 +329.260 +329.261 +329.262 +329.263 +329.264 +329.265 +329.266 +329.267 +329.268 +329.269 +329.270 +329.271 +329.272 +329.273 +329.274 +329.275 +330.258 +330.259 +330.260 +330.261 +330.262 +330.263 +330.264 +330.265 +330.266 +330.267 +330.268 +330.269 +330.270 +330.271 +330.272 +330.273 +330.274 +330.275 +331.258 +331.259 +331.260 +331.261 +331.262 +331.263 +331.264 +331.265 +331.266 +331.267 +331.268 +331.269 +331.270 +331.271 +331.272 +331.273 +331.274 +331.275 +332.258 +332.259 +332.260 +332.261 +332.262 +332.263 +332.264 +332.265 +332.266 +332.267 +332.268 +332.269 +332.270 +332.271 +332.272 +332.273 +332.274 +332.275 +333.258 +333.259 +333.260 +333.261 +333.262 +333.263 +333.264 +333.265 +333.266 +333.267 +333.268 +333.269 +333.270 +333.271 +333.272 +333.273 +333.274 +333.275 +334.258 +334.259 +334.260 +334.261 +334.262 +334.263 +334.264 +334.265 +334.266 +334.267 +334.268 +334.269 +334.270 +334.271 +334.272 +334.273 +334.274 +334.275 +335.258 +335.259 +335.260 +335.261 +335.262 +335.263 +335.264 +335.265 +335.266 +335.267 +335.268 +335.269 +335.270 +335.271 +335.272 +335.273 +335.274 +335.275 +336.258 +336.259 +336.260 +336.261 +336.262 +336.263 +336.264 +336.265 +336.266 +336.267 +336.268 +336.269 +336.270 +336.271 +336.272 +336.273 +336.274 +336.275 +337.258 +337.259 +337.260 +337.261 +337.262 +337.263 +337.264 +337.265 +337.266 +337.267 +337.268 +337.269 +337.270 +337.271 +337.272 +337.273 +337.274 +337.275 +338.258 +338.259 +338.260 +338.261 +338.262 +338.263 +338.264 +338.265 +338.266 +338.267 +338.268 +338.269 +338.270 +338.271 +338.272 +338.273 +338.274 +338.275 +339.258 +339.259 +339.260 +339.261 +339.262 +339.263 +339.264 +339.265 +339.266 +339.267 +339.268 +339.269 +339.270 +339.271 +339.272 +339.273 +339.274 +339.275 +340.258 +340.259 +340.260 +340.261 +340.262 +340.263 +340.264 +340.265 +340.266 +340.267 +340.268 +340.269 +340.270 +340.271 +340.272 +340.273 +340.274 +340.275 +341.258 +341.259 +341.260 +341.261 +341.262 +341.263 +341.264 +341.265 +341.266 +341.267 +341.268 +341.269 +341.270 +341.271 +341.272 +341.273 +341.274 +341.275 +342.258 +342.259 +342.260 +342.261 +342.262 +342.263 +342.264 +342.265 +342.266 +342.267 +342.268 +342.269 +342.270 +342.271 +342.272 +342.273 +342.274 +342.275 +343.258 +343.259 +343.260 +343.261 +343.262 +343.263 +343.264 +343.265 +343.266 +343.267 +343.268 +343.269 +343.270 +343.271 +343.272 +343.273 +343.274 +343.275 +344.258 +344.259 +344.260 +344.261 +344.262 +344.263 +344.264 +344.265 +344.266 +344.267 +344.268 +344.269 +344.270 +344.271 +344.272 +344.273 +344.274 +344.275 +345.258 +345.259 +345.260 +345.261 +345.262 +345.263 +345.264 +345.265 +345.266 +345.267 +345.268 +345.269 +345.270 +345.271 +345.272 +345.273 +345.274 +345.275 +346.258 +346.259 +346.260 +346.261 +346.262 +346.263 +346.264 +346.265 +346.266 +346.267 +346.268 +346.269 +346.270 +346.271 +346.272 +346.273 +346.274 +346.275 +347.258 +347.259 +347.260 +347.261 +347.262 +347.263 +347.264 +347.265 +347.266 +347.267 +347.268 +347.269 +347.270 +347.271 +347.272 +347.273 +347.274 +347.275 +348.258 +348.259 +348.260 +348.261 +348.262 +348.263 +348.264 +348.265 +348.266 +348.267 +348.268 +348.269 +348.270 +348.271 +348.272 +348.273 +348.274 +348.275 +349.258 +349.259 +349.260 +349.261 +349.262 +349.263 +349.264 +349.265 +349.266 +349.267 +349.268 +349.269 +349.270 +349.271 +349.272 +349.273 +349.274 +349.275 +350.258 +350.259 +350.260 +350.261 +350.262 +350.263 +350.264 +350.265 +350.266 +350.267 +350.268 +350.269 +350.270 +350.271 +350.272 +350.273 +350.274 +350.275 +351.258 +351.259 +351.260 +351.261 +351.262 +351.263 +351.264 +351.265 +351.266 +351.267 +351.268 +351.269 +351.270 +351.271 +351.272 +351.273 +351.274 +351.275 +352.258 +352.259 +352.260 +352.261 +352.262 +352.263 +352.264 +352.265 +352.266 +352.267 +352.268 +352.269 +352.270 +352.271 +352.272 +352.273 +352.274 +352.275 +353.258 +353.259 +353.260 +353.261 +353.262 +353.263 +353.264 +353.265 +353.266 +353.267 +353.268 +353.269 +353.270 +353.271 +353.272 +353.273 +353.274 +353.275 +354.258 +354.259 +354.260 +354.261 +354.262 +354.263 +354.264 +354.265 +354.266 +354.267 +354.268 +354.269 +354.270 +354.271 +354.272 +354.273 +354.274 +354.275 +355.258 +355.259 +355.260 +355.261 +355.262 +355.263 +355.264 +355.265 +355.266 +355.267 +355.268 +355.269 +355.270 +355.271 +355.272 +355.273 +355.274 +355.275 +356.258 +356.259 +356.260 +356.261 +356.262 +356.263 +356.264 +356.265 +356.266 +356.267 +356.268 +356.269 +356.270 +356.271 +356.272 +356.273 +356.274 +356.275 +357.258 +357.259 +357.260 +357.261 +357.262 +357.263 +357.264 +357.265 +357.266 +357.267 +357.268 +357.269 +357.270 +357.271 +357.272 +357.273 +357.274 +357.275 +358.257 +358.258 +358.259 +358.260 +358.261 +358.262 +358.263 +358.264 +358.265 +358.266 +358.267 +358.268 +358.269 +358.270 +358.271 +358.272 +358.273 +358.274 +358.275 +359.256 +359.257 +359.258 +359.259 +359.260 +359.261 +359.262 +359.263 +359.264 +359.265 +359.266 +359.267 +359.268 +359.269 +359.270 +359.271 +359.272 +359.273 +359.274 +359.275 +360.256 +360.257 +360.258 +360.259 +360.260 +360.261 +360.262 +360.263 +360.264 +360.265 +360.266 +360.267 +360.268 +360.269 +360.270 +360.271 +360.272 +360.273 +360.274 +360.275 +361.255 +361.256 +361.257 +361.258 +361.259 +361.260 +361.261 +361.262 +361.263 +361.264 +361.265 +361.266 +361.267 +361.268 +361.269 +361.270 +361.271 +361.272 +361.273 +361.274 +361.275 +362.254 +362.255 +362.256 +362.257 +362.258 +362.259 +362.260 +362.261 +362.262 +362.263 +362.264 +362.265 +362.266 +362.267 +362.268 +362.269 +362.270 +362.271 +362.272 +362.273 +362.274 +362.275 +363.254 +363.255 +363.256 +363.257 +363.258 +363.259 +363.260 +363.261 +363.262 +363.263 +363.264 +363.265 +363.266 +363.267 +363.268 +363.269 +363.270 +363.271 +363.272 +363.273 +363.274 +363.275 +364.253 +364.254 +364.255 +364.256 +364.257 +364.258 +364.259 +364.260 +364.261 +364.262 +364.263 +364.264 +364.265 +364.266 +364.267 +364.268 +364.269 +364.270 +364.271 +364.272 +364.273 +364.274 +364.275 +365.252 +365.253 +365.254 +365.255 +365.256 +365.257 +365.258 +365.259 +365.260 +365.261 +365.262 +365.263 +365.264 +365.265 +365.266 +365.267 +365.268 +365.269 +365.270 +365.271 +365.272 +365.273 +365.274 +365.275 +366.252 +366.253 +366.254 +366.255 +366.256 +366.257 +366.258 +366.259 +366.260 +366.261 +366.262 +366.263 +366.264 +366.265 +366.266 +366.267 +366.268 +366.269 +366.270 +366.271 +366.272 +366.273 +366.274 +366.275 +367.252 +367.253 +367.254 +367.255 +367.256 +367.257 +367.258 +367.259 +367.260 +367.261 +367.262 +367.263 +367.264 +367.265 +367.266 +367.267 +367.268 +367.269 +367.270 +367.271 +367.272 +367.273 +367.274 +367.275 +368.251 +368.252 +368.253 +368.254 +368.255 +368.256 +368.257 +368.258 +368.259 +368.260 +368.261 +368.262 +368.263 +368.264 +368.265 +368.266 +368.267 +368.268 +368.269 +368.270 +368.271 +368.272 +368.273 +368.274 +368.275 +369.251 +369.252 +369.253 +369.254 +369.255 +369.256 +369.257 +369.258 +369.259 +369.260 +369.261 +369.262 +369.263 +369.264 +369.265 +369.266 +369.267 +369.268 +369.269 +369.270 +369.271 +369.272 +369.273 +369.274 +369.275 +370.250 +370.251 +370.252 +370.253 +370.254 +370.255 +370.256 +370.257 +370.258 +370.259 +370.260 +370.261 +370.262 +370.263 +370.264 +370.265 +370.266 +370.267 +370.268 +370.269 +370.270 +370.271 +370.272 +370.273 +370.274 +370.275 +371.250 +371.251 +371.252 +371.253 +371.254 +371.255 +371.256 +371.257 +371.258 +371.259 +371.260 +371.261 +371.262 +371.263 +371.264 +371.265 +371.266 +371.267 +371.268 +371.269 +371.270 +371.271 +371.272 +371.273 +371.274 +371.275 +372.249 +372.250 +372.251 +372.252 +372.253 +372.254 +372.255 +372.256 +372.257 +372.258 +372.259 +372.260 +372.261 +372.262 +372.263 +372.264 +372.265 +372.266 +372.267 +372.268 +372.269 +372.270 +372.271 +372.272 +372.273 +372.274 +372.275 +373.249 +373.250 +373.251 +373.252 +373.253 +373.254 +373.255 +373.256 +373.257 +373.258 +373.259 +373.260 +373.261 +373.262 +373.263 +373.264 +373.265 +373.266 +373.267 +373.268 +373.269 +373.270 +373.271 +373.272 +373.273 +373.274 +374.249 +374.250 +374.251 +374.252 +374.253 +374.254 +374.255 +374.256 +374.257 +374.258 +374.259 +374.260 +374.261 +374.262 +374.263 +374.264 +374.265 +374.266 +374.267 +374.268 +374.269 +374.270 +374.271 +374.272 +374.273 +374.274 +375.248 +375.249 +375.250 +375.251 +375.252 +375.253 +375.254 +375.255 +375.256 +375.257 +375.258 +375.259 +375.260 +375.261 +375.262 +375.263 +375.264 +375.265 +375.266 +375.267 +375.268 +375.269 +375.270 +375.271 +375.272 +375.273 +375.274 +376.248 +376.249 +376.250 +376.251 +376.252 +376.253 +376.254 +376.255 +376.256 +376.257 +376.258 +376.259 +376.260 +376.261 +376.262 +376.263 +376.264 +376.265 +376.266 +376.267 +376.268 +376.269 +376.270 +376.271 +376.272 +376.273 +376.274 +377.248 +377.249 +377.250 +377.251 +377.252 +377.253 +377.254 +377.255 +377.256 +377.257 +377.258 +377.259 +377.260 +377.261 +377.262 +377.263 +377.264 +377.265 +377.266 +377.267 +377.268 +377.269 +377.270 +377.271 +377.272 +377.273 +378.248 +378.249 +378.250 +378.251 +378.252 +378.253 +378.254 +378.255 +378.256 +378.257 +378.258 +378.259 +378.260 +378.261 +378.262 +378.263 +378.264 +378.265 +378.266 +378.267 +378.268 +378.269 +378.270 +378.271 +378.272 +378.273 +379.248 +379.249 +379.250 +379.251 +379.252 +379.253 +379.254 +379.255 +379.256 +379.257 +379.258 +379.259 +379.260 +379.261 +379.262 +379.263 +379.264 +379.265 +379.266 +379.267 +379.268 +379.269 +379.270 +379.271 +379.272 +379.273 +380.248 +380.249 +380.250 +380.251 +380.252 +380.253 +380.254 +380.255 +380.256 +380.257 +380.258 +380.259 +380.260 +380.261 +380.262 +380.263 +380.264 +380.265 +380.266 +380.267 +380.268 +380.269 +380.270 +380.271 +380.272 +380.273 +381.248 +381.249 +381.250 +381.251 +381.252 +381.253 +381.254 +381.255 +381.256 +381.257 +381.258 +381.259 +381.260 +381.261 +381.262 +381.263 +381.264 +381.265 +381.266 +381.267 +381.268 +381.269 +381.270 +381.271 +381.272 +382.248 +382.249 +382.250 +382.251 +382.252 +382.253 +382.254 +382.255 +382.256 +382.257 +382.258 +382.259 +382.260 +382.261 +382.262 +382.263 +382.264 +382.265 +382.266 +382.267 +382.268 +382.269 +382.270 +382.271 +382.272 +383.248 +383.249 +383.250 +383.251 +383.252 +383.253 +383.254 +383.255 +383.256 +383.257 +383.258 +383.259 +383.260 +383.261 +383.262 +383.263 +383.264 +383.265 +383.266 +383.267 +383.268 +383.269 +383.270 +383.271 +383.272 +384.248 +384.249 +384.250 +384.251 +384.252 +384.253 +384.254 +384.255 +384.256 +384.257 +384.258 +384.259 +384.260 +384.261 +384.262 +384.263 +384.264 +384.265 +384.266 +384.267 +384.268 +384.269 +384.270 +384.271 +385.248 +385.249 +385.250 +385.251 +385.252 +385.253 +385.254 +385.255 +385.256 +385.257 +385.258 +385.259 +385.260 +385.261 +385.262 +385.263 +385.264 +385.265 +385.266 +385.267 +385.268 +385.269 +385.270 +385.271 +386.248 +386.249 +386.250 +386.251 +386.252 +386.253 +386.254 +386.255 +386.256 +386.257 +386.258 +386.259 +386.260 +386.261 +386.262 +386.263 +386.264 +386.265 +386.266 +386.267 +386.268 +386.269 +386.270 +386.271 +387.247 +387.248 +387.249 +387.250 +387.251 +387.252 +387.253 +387.254 +387.255 +387.256 +387.257 +387.258 +387.259 +387.260 +387.261 +387.262 +387.263 +387.264 +387.265 +387.266 +387.267 +387.268 +387.269 +387.270 +387.271 +388.247 +388.248 +388.249 +388.250 +388.251 +388.252 +388.253 +388.254 +388.255 +388.256 +388.257 +388.258 +388.259 +388.260 +388.261 +388.262 +388.263 +388.264 +388.265 +388.266 +388.267 +388.268 +388.269 +388.270 +389.246 +389.247 +389.248 +389.249 +389.250 +389.251 +389.252 +389.253 +389.254 +389.255 +389.256 +389.257 +389.258 +389.259 +389.260 +389.261 +389.262 +389.263 +389.264 +389.265 +389.266 +389.267 +389.268 +389.269 +389.270 +390.246 +390.247 +390.248 +390.249 +390.250 +390.251 +390.252 +390.253 +390.254 +390.255 +390.256 +390.257 +390.258 +390.259 +390.260 +390.261 +390.262 +390.263 +390.264 +390.265 +390.266 +390.267 +390.268 +390.269 +391.245 +391.246 +391.247 +391.248 +391.249 +391.250 +391.251 +391.252 +391.253 +391.254 +391.255 +391.256 +391.257 +391.258 +391.259 +391.260 +391.261 +391.262 +391.263 +391.264 +391.265 +391.266 +391.267 +391.268 +391.269 +392.244 +392.245 +392.246 +392.247 +392.248 +392.249 +392.250 +392.251 +392.252 +392.253 +392.254 +392.255 +392.256 +392.257 +392.258 +392.259 +392.260 +392.261 +392.262 +392.263 +392.264 +392.265 +392.266 +392.267 +392.268 +392.269 +393.244 +393.245 +393.246 +393.247 +393.248 +393.249 +393.250 +393.251 +393.252 +393.253 +393.254 +393.255 +393.256 +393.257 +393.258 +393.259 +393.260 +393.261 +393.262 +393.263 +393.264 +393.265 +393.266 +393.267 +393.268 +394.243 +394.244 +394.245 +394.246 +394.247 +394.248 +394.249 +394.250 +394.251 +394.252 +394.253 +394.254 +394.255 +394.256 +394.257 +394.258 +394.259 +394.260 +394.261 +394.262 +394.263 +394.264 +394.265 +394.266 +394.267 +394.268 +395.242 +395.243 +395.244 +395.245 +395.246 +395.247 +395.248 +395.249 +395.250 +395.251 +395.252 +395.253 +395.254 +395.255 +395.256 +395.257 +395.258 +395.259 +395.260 +395.261 +395.262 +395.263 +395.264 +395.265 +395.266 +395.267 +396.242 +396.243 +396.244 +396.245 +396.246 +396.247 +396.248 +396.249 +396.250 +396.251 +396.252 +396.253 +396.254 +396.255 +396.256 +396.257 +396.258 +396.259 +396.260 +396.261 +396.262 +396.263 +396.264 +396.265 +396.266 +396.267 +397.241 +397.242 +397.243 +397.244 +397.245 +397.246 +397.247 +397.248 +397.249 +397.250 +397.251 +397.252 +397.253 +397.254 +397.255 +397.256 +397.257 +397.258 +397.259 +397.260 +397.261 +397.262 +397.263 +397.264 +397.265 +397.266 +397.267 +398.241 +398.242 +398.243 +398.244 +398.245 +398.246 +398.247 +398.248 +398.249 +398.250 +398.251 +398.252 +398.253 +398.254 +398.255 +398.256 +398.257 +398.258 +398.259 +398.260 +398.261 +398.262 +398.263 +398.264 +398.265 +398.266 +398.267 +399.240 +399.241 +399.242 +399.243 +399.244 +399.245 +399.246 +399.247 +399.248 +399.249 +399.250 +399.251 +399.252 +399.253 +399.254 +399.255 +399.256 +399.257 +399.258 +399.259 +399.260 +399.261 +399.262 +399.263 +399.264 +399.265 +399.266 +400.240 +400.241 +400.242 +400.243 +400.244 +400.245 +400.246 +400.247 +400.248 +400.249 +400.250 +400.251 +400.252 +400.253 +400.254 +400.255 +400.256 +400.257 +400.258 +400.259 +400.260 +400.261 +400.262 +400.263 +400.264 +400.265 +400.266 +401.239 +401.240 +401.241 +401.242 +401.243 +401.244 +401.245 +401.246 +401.247 +401.248 +401.249 +401.250 +401.251 +401.252 +401.253 +401.254 +401.255 +401.256 +401.257 +401.258 +401.259 +401.260 +401.261 +401.262 +401.263 +401.264 +401.265 +401.266 +402.239 +402.240 +402.241 +402.242 +402.243 +402.244 +402.245 +402.246 +402.247 +402.248 +402.249 +402.250 +402.251 +402.252 +402.253 +402.254 +402.255 +402.256 +402.257 +402.258 +402.259 +402.260 +402.261 +402.262 +402.263 +402.264 +402.265 +403.238 +403.239 +403.240 +403.241 +403.242 +403.243 +403.244 +403.245 +403.246 +403.247 +403.248 +403.249 +403.250 +403.251 +403.252 +403.253 +403.254 +403.255 +403.256 +403.257 +403.258 +403.259 +403.260 +403.261 +403.262 +403.263 +403.264 +403.265 +404.238 +404.239 +404.240 +404.241 +404.242 +404.243 +404.244 +404.245 +404.246 +404.247 +404.248 +404.249 +404.250 +404.251 +404.252 +404.253 +404.254 +404.255 +404.256 +404.257 +404.258 +404.259 +404.260 +404.261 +404.262 +404.263 +404.264 +404.265 +405.238 +405.239 +405.240 +405.241 +405.242 +405.243 +405.244 +405.245 +405.246 +405.247 +405.248 +405.249 +405.250 +405.251 +405.252 +405.253 +405.254 +405.255 +405.256 +405.257 +405.258 +405.259 +405.260 +405.261 +405.262 +405.263 +405.264 +406.238 +406.239 +406.240 +406.241 +406.242 +406.243 +406.244 +406.245 +406.246 +406.247 +406.248 +406.249 +406.250 +406.251 +406.252 +406.253 +406.254 +406.255 +406.256 +406.257 +406.258 +406.259 +406.260 +406.261 +406.262 +406.263 +406.264 +407.238 +407.239 +407.240 +407.241 +407.242 +407.243 +407.244 +407.245 +407.246 +407.247 +407.248 +407.249 +407.250 +407.251 +407.252 +407.253 +407.254 +407.255 +407.256 +407.257 +407.258 +407.259 +407.260 +407.261 +407.262 +407.263 +407.264 +408.238 +408.239 +408.240 +408.241 +408.242 +408.243 +408.244 +408.245 +408.246 +408.247 +408.248 +408.249 +408.250 +408.251 +408.252 +408.253 +408.254 +408.255 +408.256 +408.257 +408.258 +408.259 +408.260 +408.261 +408.262 +408.263 +408.264 +409.238 +409.239 +409.240 +409.241 +409.242 +409.243 +409.244 +409.245 +409.246 +409.247 +409.248 +409.249 +409.250 +409.251 +409.252 +409.253 +409.254 +409.255 +409.256 +409.257 +409.258 +409.259 +409.260 +409.261 +409.262 +409.263 +410.238 +410.239 +410.240 +410.241 +410.242 +410.243 +410.244 +410.245 +410.246 +410.247 +410.248 +410.249 +410.250 +410.251 +410.252 +410.253 +410.254 +410.255 +410.256 +410.257 +410.258 +410.259 +410.260 +410.261 +410.262 +410.263 +411.238 +411.239 +411.240 +411.241 +411.242 +411.243 +411.244 +411.245 +411.246 +411.247 +411.248 +411.249 +411.250 +411.251 +411.252 +411.253 +411.254 +411.255 +411.256 +411.257 +411.258 +411.259 +411.260 +411.261 +411.262 +412.238 +412.239 +412.240 +412.241 +412.242 +412.243 +412.244 +412.245 +412.246 +412.247 +412.248 +412.249 +412.250 +412.251 +412.252 +412.253 +412.254 +412.255 +412.256 +412.257 +412.258 +412.259 +412.260 +412.261 +412.262 +413.238 +413.239 +413.240 +413.241 +413.242 +413.243 +413.244 +413.245 +413.246 +413.247 +413.248 +413.249 +413.250 +413.251 +413.252 +413.253 +413.254 +413.255 +413.256 +413.257 +413.258 +413.259 +413.260 +413.261 +413.262 +414.238 +414.239 +414.240 +414.241 +414.242 +414.243 +414.244 +414.245 +414.246 +414.247 +414.248 +414.249 +414.250 +414.251 +414.252 +414.253 +414.254 +414.255 +414.256 +414.257 +414.258 +414.259 +414.260 +414.261 +415.238 +415.239 +415.240 +415.241 +415.242 +415.243 +415.244 +415.245 +415.246 +415.247 +415.248 +415.249 +415.250 +415.251 +415.252 +415.253 +415.254 +415.255 +415.256 +415.257 +415.258 +415.259 +415.260 +415.261 +416.238 +416.239 +416.240 +416.241 +416.242 +416.243 +416.244 +416.245 +416.246 +416.247 +416.248 +416.249 +416.250 +416.251 +416.252 +416.253 +416.254 +416.255 +416.256 +416.257 +416.258 +416.259 +416.260 +416.261 +417.238 +417.239 +417.240 +417.241 +417.242 +417.243 +417.244 +417.245 +417.246 +417.247 +417.248 +417.249 +417.250 +417.251 +417.252 +417.253 +417.254 +417.255 +417.256 +417.257 +417.258 +417.259 +417.260 +418.238 +418.239 +418.240 +418.241 +418.242 +418.243 +418.244 +418.245 +418.246 +418.247 +418.248 +418.249 +418.250 +418.251 +418.252 +418.253 +418.254 +418.255 +418.256 +418.257 +418.258 +418.259 +418.260 +419.238 +419.239 +419.240 +419.241 +419.242 +419.243 +419.244 +419.245 +419.246 +419.247 +419.248 +419.249 +419.250 +419.251 +419.252 +419.253 +419.254 +419.255 +419.256 +419.257 +419.258 +419.259 +420.238 +420.239 +420.240 +420.241 +420.242 +420.243 +420.244 +420.245 +420.246 +420.247 +420.248 +420.249 +420.250 +420.251 +420.252 +420.253 +420.254 +420.255 +420.256 +420.257 +420.258 +420.259 +421.238 +421.239 +421.240 +421.241 +421.242 +421.243 +421.244 +421.245 +421.246 +421.247 +421.248 +421.249 +421.250 +421.251 +421.252 +421.253 +421.254 +421.255 +421.256 +421.257 +421.258 +422.238 +422.239 +422.240 +422.241 +422.242 +422.243 +422.244 +422.245 +422.246 +422.247 +422.248 +422.249 +422.250 +422.251 +422.252 +422.253 +422.254 +422.255 +422.256 +422.257 +422.258 +423.238 +423.239 +423.240 +423.241 +423.242 +423.243 +423.244 +423.245 +423.246 +423.247 +423.248 +423.249 +423.250 +423.251 +423.252 +423.253 +423.254 +423.255 +423.256 +423.257 +424.238 +424.239 +424.240 +424.241 +424.242 +424.243 +424.244 +424.245 +424.246 +424.247 +424.248 +424.249 +424.250 +424.251 +424.252 +424.253 +424.254 +424.255 +424.256 +424.257 +425.238 +425.239 +425.240 +425.241 +425.242 +425.243 +425.244 +425.245 +425.246 +425.247 +425.248 +425.249 +425.250 +425.251 +425.252 +425.253 +425.254 +425.255 +425.256 +425.257 +426.238 +426.239 +426.240 +426.241 +426.242 +426.243 +426.244 +426.245 +426.246 +426.247 +426.248 +426.249 +426.250 +426.251 +426.252 +426.253 +426.254 +426.255 +426.256 +426.257 +427.238 +427.239 +427.240 +427.241 +427.242 +427.243 +427.244 +427.245 +427.246 +427.247 +427.248 +427.249 +427.250 +427.251 +427.252 +427.253 +427.254 +427.255 +427.256 +427.257 +428.238 +428.239 +428.240 +428.241 +428.242 +428.243 +428.244 +428.245 +428.246 +428.247 +428.248 +428.249 +428.250 +428.251 +428.252 +428.253 +428.254 +428.255 +428.256 +429.238 +429.239 +429.240 +429.241 +429.242 +429.243 +429.244 +429.245 +429.246 +429.247 +429.248 +429.249 +429.250 +429.251 +429.252 +429.253 +429.254 +429.255 +429.256 +430.238 +430.239 +430.240 +430.241 +430.242 +430.243 +430.244 +430.245 +430.246 +430.247 +430.248 +430.249 +430.250 +430.251 +430.252 +430.253 +430.254 +430.255 +430.256 +431.238 +431.239 +431.240 +431.241 +431.242 +431.243 +431.244 +431.245 +431.246 +431.247 +431.248 +431.249 +431.250 +431.251 +431.252 +431.253 +431.254 +431.255 +432.238 +432.239 +432.240 +432.241 +432.242 +432.243 +432.244 +432.245 +432.246 +432.247 +432.248 +432.249 +432.250 +432.251 +432.252 +432.253 +432.254 +432.255 +433.238 +433.239 +433.240 +433.241 +433.242 +433.243 +433.244 +433.245 +433.246 +433.247 +433.248 +433.249 +433.250 +433.251 +433.252 +433.253 +433.254 +433.255 +434.238 +434.239 +434.240 +434.241 +434.242 +434.243 +434.244 +434.245 +434.246 +434.247 +434.248 +434.249 +434.250 +434.251 +434.252 +434.253 +434.254 +435.238 +435.239 +435.240 +435.241 +435.242 +435.243 +435.244 +435.245 +435.246 +435.247 +435.248 +435.249 +435.250 +435.251 +435.252 +435.253 +436.238 +436.239 +436.240 +436.241 +436.242 +436.243 +436.244 +436.245 +436.246 +436.247 +436.248 +436.249 +436.250 +436.251 +436.252 +436.253 +437.238 +437.239 +437.240 +437.241 +437.242 +437.243 +437.244 +437.245 +437.246 +437.247 +437.248 +437.249 +437.250 +437.251 +437.252 +437.253 +438.238 +438.239 +438.240 +438.241 +438.242 +438.243 +438.244 +438.245 +438.246 +438.247 +438.248 +438.249 +438.250 +438.251 +438.252 +438.253 +439.238 +439.239 +439.240 +439.241 +439.242 +439.243 +439.244 +439.245 +439.246 +439.247 +439.248 +439.249 +439.250 +439.251 +439.252 +440.238 +440.239 +440.240 +440.241 +440.242 +440.243 +440.244 +440.245 +440.246 +440.247 +440.248 +440.249 +440.250 +440.251 +440.252 +441.238 +441.239 +441.240 +441.241 +441.242 +441.243 +441.244 +441.245 +441.246 +441.247 +441.248 +441.249 +441.250 +441.251 +442.238 +442.239 +442.240 +442.241 +442.242 +442.243 +442.244 +442.245 +442.246 +442.247 +442.248 +442.249 +442.250 +442.251 +443.238 +443.239 +443.240 +443.241 +443.242 +443.243 +443.244 +443.245 +443.246 +443.247 +443.248 +443.249 +443.250 +443.251 +444.238 +444.239 +444.240 +444.241 +444.242 +444.243 +444.244 +444.245 +444.246 +444.247 +444.248 +444.249 +444.250 +445.238 +445.239 +445.240 +445.241 +445.242 +445.243 +445.244 +445.245 +445.246 +445.247 +445.248 +445.249 +446.238 +446.239 +446.240 +446.241 +446.242 +446.243 +446.244 +446.245 +446.246 +446.247 +446.248 +446.249 +447.238 +447.239 +447.240 +447.241 +447.242 +447.243 +447.244 +447.245 +447.246 +447.247 +447.248 +448.238 +448.239 +448.240 +448.241 +448.242 +448.243 +448.244 +448.245 +448.246 +448.247 +448.248 +449.238 +449.239 +449.240 +449.241 +449.242 +449.243 +449.244 +449.245 +449.246 +449.247 +449.248 +450.238 +450.239 +450.240 +450.241 +450.242 +450.243 +450.244 +450.245 +450.246 +450.247 +451.238 +451.239 +451.240 +451.241 +451.242 +451.243 +451.244 +451.245 +451.246 +451.247 +452.238 +452.239 +452.240 +452.241 +452.242 +452.243 +452.244 +452.245 +452.246 +452.247 +453.238 +453.239 +453.240 +453.241 +453.242 +453.243 +453.244 +453.245 +453.246 +454.238 +454.239 +454.240 +454.241 +454.242 +454.243 +454.244 +454.245 +454.246 +455.238 +455.239 +455.240 +455.241 +455.242 +455.243 +455.244 +455.245 +456.238 +456.239 +456.240 +456.241 +456.242 +456.243 +456.244 +456.245 +457.238 +457.239 +457.240 +457.241 +457.242 +457.243 +457.244 +458.238 +458.239 +458.240 +458.241 +458.242 +458.243 +458.244 +459.238 +459.239 +459.240 +459.241 +459.242 +459.243 +460.238 +460.239 +460.240 +460.241 +460.242 +460.243 +461.238 +461.239 +461.240 +461.241 +461.242 +462.238 +462.239 +462.240 +462.241 +462.242 +463.238 +463.239 +463.240 +463.241 +463.242 +464.238 +464.239 +464.240 +464.241 +465.238 +465.239 +465.240 +465.241 +466.238 +466.239 +466.240 +467.238 +467.239 +467.240 +468.238 +468.239 +469.238 +470.238 diff --git a/auxdir/CFIS/tiles_202510/tiles_P6.txt b/auxdir/CFIS/tiles_202510/tiles_P6.txt new file mode 100644 index 00000000..2d8dd52c --- /dev/null +++ b/auxdir/CFIS/tiles_202510/tiles_P6.txt @@ -0,0 +1,1773 @@ +188.312 +189.312 +190.314 +191.311 +191.314 +192.311 +192.314 +193.311 +193.314 +194.313 +194.314 +195.310 +195.313 +195.314 +196.310 +196.312 +196.313 +196.314 +197.310 +197.312 +197.313 +197.314 +198.310 +198.312 +198.313 +198.314 +199.309 +199.310 +199.312 +199.313 +199.314 +200.309 +200.310 +200.311 +200.312 +200.313 +200.314 +201.309 +201.310 +201.311 +201.312 +201.313 +201.314 +202.308 +202.309 +202.310 +202.311 +202.312 +202.313 +202.314 +203.308 +203.309 +203.310 +203.311 +203.312 +203.313 +203.314 +204.308 +204.309 +204.310 +204.311 +204.312 +204.313 +204.314 +205.308 +205.309 +205.310 +205.311 +205.312 +205.313 +206.307 +206.308 +206.309 +206.310 +206.311 +206.312 +206.313 +207.307 +207.308 +207.309 +207.310 +207.311 +207.312 +207.313 +208.307 +208.308 +208.309 +208.310 +208.311 +208.312 +208.313 +209.306 +209.307 +209.308 +209.309 +209.310 +209.311 +209.312 +210.306 +210.307 +210.308 +210.309 +210.310 +210.311 +210.312 +211.306 +211.307 +211.308 +211.309 +211.310 +211.311 +211.312 +212.306 +212.307 +212.308 +212.309 +212.310 +212.311 +212.312 +213.305 +213.306 +213.307 +213.308 +213.309 +213.310 +213.311 +214.305 +214.306 +214.307 +214.308 +214.309 +214.310 +214.311 +215.305 +215.306 +215.307 +215.308 +215.309 +215.310 +216.304 +216.305 +216.306 +216.307 +216.308 +216.309 +216.310 +217.304 +217.305 +217.306 +217.307 +217.308 +217.309 +217.310 +218.304 +218.305 +218.306 +218.307 +218.308 +218.309 +218.310 +219.304 +219.305 +219.306 +219.307 +219.308 +219.309 +220.303 +220.304 +220.305 +220.306 +220.307 +220.308 +221.303 +221.304 +221.306 +221.307 +221.308 +222.304 +222.306 +222.307 +222.308 +223.304 +223.306 +223.307 +223.308 +224.302 +224.304 +224.305 +224.306 +224.307 +224.308 +225.305 +225.306 +225.307 +225.308 +226.305 +226.306 +226.307 +226.308 +227.304 +227.305 +227.306 +227.307 +227.308 +228.304 +228.305 +228.306 +228.307 +228.308 +229.304 +229.305 +229.306 +229.307 +229.308 +230.304 +230.305 +230.306 +230.307 +231.304 +231.305 +231.306 +231.307 +232.303 +232.304 +232.305 +232.306 +232.307 +233.303 +233.304 +233.305 +233.306 +233.307 +234.299 +234.303 +234.304 +234.305 +234.306 +235.299 +235.302 +235.303 +235.304 +235.305 +235.306 +236.299 +236.302 +236.303 +236.304 +236.305 +236.306 +237.298 +237.299 +237.301 +237.302 +237.303 +237.304 +237.305 +237.306 +238.298 +238.299 +238.301 +238.302 +238.303 +238.304 +238.305 +239.298 +239.299 +239.300 +239.301 +239.302 +239.303 +239.304 +239.305 +240.298 +240.299 +240.300 +240.301 +240.302 +240.303 +240.304 +240.305 +241.297 +241.298 +241.299 +241.300 +241.301 +241.302 +241.303 +241.304 +241.308 +242.297 +242.298 +242.299 +242.300 +242.301 +242.302 +242.303 +242.304 +242.308 +243.297 +243.298 +243.299 +243.300 +243.301 +243.302 +243.303 +243.304 +243.308 +244.296 +244.297 +244.298 +244.299 +244.300 +244.301 +244.302 +244.303 +244.304 +244.308 +245.296 +245.297 +245.298 +245.299 +245.300 +245.301 +245.302 +245.303 +245.307 +245.308 +246.296 +246.297 +246.298 +246.299 +246.300 +246.301 +246.302 +246.303 +246.307 +246.308 +247.296 +247.297 +247.298 +247.299 +247.300 +247.301 +247.302 +247.303 +247.307 +247.308 +248.295 +248.296 +248.297 +248.298 +248.299 +248.300 +248.301 +248.302 +248.303 +248.306 +248.307 +248.308 +249.295 +249.296 +249.297 +249.298 +249.299 +249.300 +249.301 +249.302 +249.306 +249.307 +250.295 +250.296 +250.297 +250.298 +250.299 +250.300 +250.301 +250.302 +250.306 +250.307 +251.294 +251.295 +251.296 +251.297 +251.298 +251.299 +251.300 +251.301 +251.302 +251.306 +251.307 +252.294 +252.295 +252.296 +252.297 +252.298 +252.299 +252.300 +252.301 +252.305 +252.306 +252.307 +253.294 +253.295 +253.296 +253.297 +253.298 +253.299 +253.300 +253.301 +253.305 +253.306 +254.293 +254.294 +254.295 +254.296 +254.297 +254.298 +254.299 +254.300 +254.301 +254.305 +254.306 +255.293 +255.294 +255.295 +255.296 +255.297 +255.298 +255.299 +255.300 +255.305 +255.306 +256.293 +256.294 +256.295 +256.296 +256.297 +256.298 +256.299 +256.300 +256.304 +256.305 +256.306 +257.293 +257.294 +257.295 +257.296 +257.297 +257.298 +257.299 +257.304 +257.305 +257.306 +258.292 +258.293 +258.294 +258.295 +258.296 +258.297 +258.298 +258.299 +258.304 +258.305 +259.292 +259.293 +259.294 +259.295 +259.296 +259.297 +259.298 +259.299 +259.304 +259.305 +260.292 +260.293 +260.294 +260.295 +260.296 +260.297 +260.298 +260.299 +260.303 +260.304 +260.305 +261.291 +261.292 +261.293 +261.294 +261.295 +261.296 +261.297 +261.298 +261.299 +261.303 +261.304 +261.305 +262.291 +262.292 +262.293 +262.294 +262.295 +262.296 +262.297 +262.298 +262.299 +262.303 +262.304 +263.291 +263.292 +263.293 +263.294 +263.295 +263.296 +263.297 +263.298 +263.299 +263.303 +263.304 +264.290 +264.291 +264.292 +264.293 +264.294 +264.295 +264.296 +264.297 +264.298 +264.299 +264.303 +264.304 +265.290 +265.291 +265.292 +265.293 +265.294 +265.295 +265.296 +265.297 +265.298 +265.299 +265.302 +265.303 +265.304 +266.290 +266.291 +266.292 +266.293 +266.294 +266.295 +266.296 +266.297 +266.298 +266.299 +266.302 +266.303 +266.304 +267.290 +267.291 +267.292 +267.293 +267.294 +267.295 +267.296 +267.297 +267.298 +267.299 +267.302 +267.303 +268.289 +268.290 +268.291 +268.292 +268.293 +268.294 +268.295 +268.296 +268.297 +268.298 +268.299 +268.301 +268.302 +268.303 +269.289 +269.290 +269.291 +269.292 +269.293 +269.294 +269.295 +269.296 +269.297 +269.298 +269.299 +269.301 +269.302 +269.303 +270.289 +270.290 +270.291 +270.292 +270.293 +270.294 +270.295 +270.296 +270.297 +270.298 +270.299 +270.301 +270.302 +271.289 +271.290 +271.291 +271.292 +271.293 +271.294 +271.295 +271.296 +271.297 +271.298 +271.299 +271.301 +271.302 +272.289 +272.290 +272.291 +272.292 +272.293 +272.294 +272.295 +272.296 +272.297 +272.298 +272.299 +272.300 +272.301 +272.302 +273.289 +273.290 +273.291 +273.292 +273.293 +273.294 +273.295 +273.296 +273.297 +273.298 +273.299 +273.300 +273.301 +273.302 +274.287 +274.289 +274.290 +274.291 +274.292 +274.293 +274.294 +274.295 +274.296 +274.297 +274.298 +274.299 +274.300 +274.301 +275.287 +275.289 +275.290 +275.291 +275.292 +275.293 +275.294 +275.295 +275.296 +275.297 +275.298 +275.299 +275.300 +275.301 +276.287 +276.289 +276.290 +276.291 +276.292 +276.293 +276.294 +276.295 +276.296 +276.297 +276.298 +276.299 +276.300 +276.301 +277.286 +277.287 +277.289 +277.290 +277.291 +277.292 +277.293 +277.294 +277.295 +277.296 +277.297 +277.298 +277.299 +277.300 +278.286 +278.287 +278.289 +278.290 +278.291 +278.292 +278.293 +278.294 +278.295 +278.296 +278.297 +278.298 +278.299 +278.300 +279.286 +279.287 +279.289 +279.290 +279.291 +279.292 +279.293 +279.294 +279.295 +279.296 +279.297 +279.298 +279.299 +279.300 +280.286 +280.287 +280.289 +280.290 +280.291 +280.292 +280.293 +280.294 +280.295 +280.296 +280.297 +280.298 +280.299 +280.300 +281.285 +281.286 +281.287 +281.288 +281.289 +281.290 +281.291 +281.292 +281.293 +281.294 +281.295 +281.296 +281.297 +281.298 +281.299 +282.285 +282.286 +282.287 +282.288 +282.289 +282.290 +282.291 +282.292 +282.293 +282.294 +282.295 +282.296 +282.297 +282.298 +282.299 +283.285 +283.286 +283.287 +283.288 +283.289 +283.290 +283.291 +283.292 +283.293 +283.294 +283.295 +283.296 +283.297 +283.298 +283.299 +284.284 +284.285 +284.286 +284.287 +284.288 +284.289 +284.290 +284.291 +284.292 +284.293 +284.294 +284.295 +284.296 +284.297 +284.298 +284.299 +285.284 +285.285 +285.286 +285.287 +285.288 +285.289 +285.290 +285.291 +285.292 +285.293 +285.294 +285.295 +285.296 +285.297 +285.298 +286.284 +286.285 +286.286 +286.287 +286.288 +286.289 +286.290 +286.291 +286.292 +286.293 +286.294 +286.295 +286.296 +286.297 +286.298 +287.283 +287.284 +287.285 +287.286 +287.287 +287.288 +287.289 +287.290 +287.291 +287.292 +287.293 +287.294 +287.295 +287.296 +287.297 +287.298 +288.283 +288.284 +288.285 +288.286 +288.287 +288.288 +288.289 +288.290 +288.291 +288.292 +288.293 +288.294 +288.295 +288.296 +288.297 +288.298 +289.283 +289.284 +289.285 +289.286 +289.287 +289.288 +289.289 +289.290 +289.291 +289.292 +289.293 +289.294 +289.295 +289.296 +289.297 +290.282 +290.283 +290.284 +290.285 +290.286 +290.287 +290.288 +290.289 +290.290 +290.291 +290.292 +290.293 +290.294 +290.295 +290.296 +290.297 +291.282 +291.283 +291.284 +291.285 +291.286 +291.287 +291.288 +291.289 +291.290 +291.291 +291.292 +291.293 +291.294 +291.295 +291.296 +291.297 +292.282 +292.283 +292.284 +292.285 +292.286 +292.287 +292.288 +292.289 +292.290 +292.291 +292.292 +292.293 +292.294 +292.295 +292.296 +292.297 +293.281 +293.282 +293.283 +293.284 +293.285 +293.286 +293.287 +293.288 +293.289 +293.290 +293.291 +293.292 +293.293 +293.294 +293.295 +293.296 +294.281 +294.282 +294.283 +294.284 +294.285 +294.286 +294.287 +294.288 +294.289 +294.290 +294.291 +294.292 +294.293 +294.294 +294.295 +294.296 +295.281 +295.282 +295.283 +295.284 +295.285 +295.286 +295.287 +295.288 +295.289 +295.290 +295.291 +295.292 +295.293 +295.294 +295.295 +295.296 +296.280 +296.281 +296.282 +296.283 +296.284 +296.285 +296.286 +296.287 +296.288 +296.289 +296.290 +296.291 +296.292 +296.293 +296.294 +296.295 +296.296 +297.280 +297.281 +297.282 +297.283 +297.284 +297.285 +297.286 +297.287 +297.288 +297.289 +297.290 +297.291 +297.292 +297.293 +297.294 +297.295 +298.280 +298.281 +298.282 +298.283 +298.284 +298.285 +298.286 +298.287 +298.288 +298.289 +298.290 +298.291 +298.292 +298.293 +298.294 +298.295 +299.279 +299.280 +299.281 +299.282 +299.283 +299.284 +299.285 +299.286 +299.287 +299.288 +299.289 +299.290 +299.291 +299.292 +299.293 +299.294 +299.295 +300.279 +300.280 +300.281 +300.282 +300.283 +300.284 +300.285 +300.286 +300.287 +300.288 +300.289 +300.290 +300.291 +300.292 +300.293 +300.294 +300.295 +301.279 +301.280 +301.281 +301.282 +301.283 +301.284 +301.285 +301.286 +301.287 +301.288 +301.289 +301.290 +301.291 +301.292 +301.293 +301.294 +302.278 +302.279 +302.280 +302.281 +302.282 +302.283 +302.284 +302.285 +302.286 +302.287 +302.288 +302.289 +302.290 +302.291 +302.292 +302.293 +302.294 +303.278 +303.279 +303.280 +303.281 +303.282 +303.283 +303.284 +303.285 +303.286 +303.287 +303.288 +303.289 +303.290 +303.291 +303.292 +303.293 +303.294 +304.278 +304.279 +304.280 +304.281 +304.282 +304.283 +304.284 +304.285 +304.286 +304.287 +304.288 +304.289 +304.290 +304.291 +304.292 +304.293 +304.294 +305.277 +305.278 +305.279 +305.280 +305.281 +305.282 +305.283 +305.284 +305.285 +305.286 +305.287 +305.288 +305.289 +305.290 +305.291 +305.292 +305.293 +306.277 +306.278 +306.279 +306.280 +306.281 +306.282 +306.283 +306.284 +306.285 +306.286 +306.287 +306.288 +306.289 +306.290 +306.291 +306.292 +306.293 +307.277 +307.278 +307.279 +307.280 +307.281 +307.282 +307.283 +307.284 +307.285 +307.286 +307.287 +307.288 +307.289 +307.290 +307.291 +307.292 +307.293 +308.276 +308.277 +308.278 +308.279 +308.280 +308.281 +308.282 +308.283 +308.284 +308.285 +308.286 +308.287 +308.288 +308.289 +308.290 +308.291 +308.292 +308.293 +309.276 +309.277 +309.278 +309.279 +309.280 +309.281 +309.282 +309.283 +309.284 +309.285 +309.286 +309.287 +309.288 +309.289 +309.290 +309.291 +309.292 +309.293 +310.276 +310.277 +310.278 +310.279 +310.280 +310.281 +310.282 +310.283 +310.284 +310.285 +310.286 +310.287 +310.288 +310.289 +310.290 +310.291 +310.292 +311.276 +311.277 +311.278 +311.279 +311.280 +311.281 +311.282 +311.283 +311.284 +311.285 +311.286 +311.287 +311.288 +311.289 +311.290 +311.291 +311.292 +312.276 +312.277 +312.278 +312.279 +312.280 +312.281 +312.282 +312.283 +312.284 +312.285 +312.286 +312.287 +312.288 +312.289 +312.290 +312.291 +312.292 +313.276 +313.277 +313.278 +313.279 +313.280 +313.281 +313.282 +313.283 +313.284 +313.285 +313.286 +313.287 +313.288 +313.289 +313.290 +313.291 +314.276 +314.277 +314.278 +314.279 +314.280 +314.281 +314.282 +314.283 +314.284 +314.285 +314.286 +314.287 +314.288 +314.289 +314.290 +314.291 +315.276 +315.277 +315.278 +315.279 +315.280 +315.281 +315.282 +315.283 +315.284 +315.285 +315.286 +315.287 +315.288 +315.289 +315.290 +315.291 +316.276 +316.277 +316.278 +316.279 +316.280 +316.281 +316.282 +316.283 +316.284 +316.285 +316.286 +316.287 +316.288 +316.289 +316.290 +316.291 +317.276 +317.277 +317.278 +317.279 +317.280 +317.281 +317.282 +317.283 +317.284 +317.285 +317.286 +317.287 +317.288 +317.289 +317.290 +318.276 +318.277 +318.278 +318.279 +318.280 +318.281 +318.282 +318.283 +318.284 +318.285 +318.286 +318.287 +318.288 +318.289 +318.290 +319.276 +319.277 +319.278 +319.279 +319.280 +319.281 +319.282 +319.283 +319.284 +319.285 +319.286 +319.287 +319.288 +319.289 +319.290 +320.276 +320.277 +320.278 +320.279 +320.280 +320.281 +320.282 +320.283 +320.284 +320.285 +320.286 +320.287 +320.288 +320.289 +320.290 +321.276 +321.277 +321.278 +321.279 +321.280 +321.281 +321.282 +321.283 +321.284 +321.285 +321.286 +321.287 +321.288 +321.289 +322.276 +322.277 +322.278 +322.279 +322.280 +322.281 +322.282 +322.283 +322.284 +322.285 +322.286 +322.287 +322.288 +322.289 +323.276 +323.277 +323.278 +323.279 +323.280 +323.281 +323.282 +323.283 +323.284 +323.285 +323.286 +323.287 +323.288 +323.289 +324.276 +324.277 +324.278 +324.279 +324.280 +324.281 +324.282 +324.283 +324.284 +324.285 +324.286 +324.287 +324.288 +324.289 +325.276 +325.277 +325.278 +325.279 +325.280 +325.281 +325.282 +325.283 +325.284 +325.285 +325.286 +325.287 +325.288 +326.276 +326.277 +326.278 +326.279 +326.280 +326.281 +326.282 +326.283 +326.284 +326.285 +326.286 +326.287 +326.288 +327.276 +327.277 +327.278 +327.279 +327.280 +327.281 +327.282 +327.283 +327.284 +327.285 +327.286 +327.287 +327.288 +328.276 +328.277 +328.278 +328.279 +328.280 +328.281 +328.282 +328.283 +328.284 +328.285 +328.286 +328.287 +329.276 +329.277 +329.278 +329.279 +329.280 +329.281 +329.282 +329.283 +329.284 +329.285 +329.286 +329.287 +330.276 +330.277 +330.278 +330.279 +330.280 +330.281 +330.282 +330.283 +330.284 +330.285 +330.286 +330.287 +331.276 +331.277 +331.278 +331.279 +331.280 +331.281 +331.282 +331.283 +331.284 +331.285 +331.286 +331.287 +332.276 +332.277 +332.278 +332.279 +332.280 +332.281 +332.282 +332.283 +332.284 +332.285 +332.286 +333.276 +333.277 +333.278 +333.279 +333.280 +333.281 +333.282 +333.283 +333.284 +333.285 +333.286 +334.276 +334.277 +334.278 +334.279 +334.280 +334.281 +334.282 +334.283 +334.284 +334.285 +334.286 +335.276 +335.277 +335.278 +335.279 +335.280 +335.281 +335.282 +335.283 +335.284 +335.285 +335.286 +336.276 +336.277 +336.278 +336.279 +336.280 +336.281 +336.282 +336.283 +336.284 +336.285 +337.276 +337.277 +337.278 +337.279 +337.280 +337.281 +337.282 +337.283 +337.284 +337.285 +338.276 +338.277 +338.278 +338.279 +338.280 +338.281 +338.282 +338.283 +338.284 +338.285 +339.276 +339.277 +339.278 +339.279 +339.280 +339.281 +339.282 +339.283 +339.284 +339.285 +340.276 +340.277 +340.278 +340.279 +340.280 +340.281 +340.282 +340.283 +340.284 +341.276 +341.277 +341.278 +341.279 +341.280 +341.281 +341.282 +341.283 +341.284 +342.276 +342.277 +342.278 +342.279 +342.280 +342.281 +342.282 +342.283 +342.284 +343.276 +343.277 +343.278 +343.279 +343.280 +343.281 +343.282 +343.283 +344.276 +344.277 +344.278 +344.279 +344.280 +344.281 +344.282 +344.283 +345.276 +345.277 +345.278 +345.279 +345.280 +345.281 +345.282 +345.283 +346.276 +346.277 +346.278 +346.279 +346.280 +346.281 +346.282 +346.283 +347.276 +347.277 +347.278 +347.279 +347.280 +347.281 +347.282 +348.276 +348.277 +348.278 +348.279 +348.280 +348.281 +348.282 +349.276 +349.277 +349.278 +349.279 +349.280 +349.281 +349.282 +350.276 +350.277 +350.278 +350.279 +350.280 +350.281 +351.276 +351.277 +351.278 +351.279 +351.280 +351.281 +352.276 +352.277 +352.278 +352.279 +352.280 +352.281 +353.276 +353.277 +353.278 +353.279 +353.280 +353.281 +354.276 +354.277 +354.278 +354.279 +354.280 +355.276 +355.277 +355.278 +355.279 +355.280 +356.276 +356.277 +356.278 +356.279 +356.280 +357.276 +357.277 +357.278 +357.279 +358.276 +358.277 +358.278 +358.279 +359.276 +359.277 +359.278 +359.279 +360.276 +360.277 +360.278 +360.279 +361.276 +361.277 +361.278 +362.276 +362.277 +362.278 +363.276 +363.277 +363.278 +364.276 +364.277 +365.276 +365.277 +366.276 +366.277 +367.276 +368.276 diff --git a/auxdir/CFIS/tiles_202510/tiles_P7.txt b/auxdir/CFIS/tiles_202510/tiles_P7.txt new file mode 100644 index 00000000..535084a2 --- /dev/null +++ b/auxdir/CFIS/tiles_202510/tiles_P7.txt @@ -0,0 +1,231 @@ +052.332 +053.331 +053.332 +054.331 +054.332 +055.330 +055.331 +055.332 +056.330 +056.331 +056.332 +057.329 +057.330 +057.331 +057.332 +058.329 +058.330 +058.331 +058.332 +059.329 +059.330 +059.331 +059.332 +060.329 +060.330 +060.331 +060.332 +061.329 +061.330 +061.331 +061.332 +062.326 +062.329 +062.330 +062.331 +062.332 +063.325 +063.326 +063.329 +063.330 +063.331 +063.332 +064.324 +064.325 +064.326 +064.329 +064.330 +064.331 +064.332 +065.324 +065.325 +065.326 +065.329 +065.330 +065.331 +065.332 +066.321 +066.323 +066.324 +066.325 +066.326 +066.329 +066.330 +066.331 +067.321 +067.322 +067.323 +067.324 +067.325 +067.326 +067.329 +067.330 +067.331 +068.320 +068.321 +068.322 +068.323 +068.324 +068.325 +068.326 +068.329 +068.330 +069.319 +069.320 +069.321 +069.322 +069.323 +069.324 +069.325 +069.326 +069.329 +069.330 +070.319 +070.320 +070.321 +070.322 +070.323 +070.324 +070.325 +070.326 +070.329 +070.330 +071.318 +071.319 +071.320 +071.321 +071.322 +071.323 +071.324 +071.325 +071.326 +071.329 +072.318 +072.319 +072.320 +072.321 +072.322 +072.323 +072.324 +072.325 +072.326 +073.317 +073.318 +073.319 +073.320 +073.321 +073.322 +073.323 +073.324 +073.325 +073.326 +074.317 +074.318 +074.319 +074.320 +074.321 +074.322 +074.323 +074.324 +074.325 +074.326 +075.317 +075.318 +075.319 +075.320 +075.321 +075.322 +075.323 +075.324 +075.325 +075.326 +076.317 +076.318 +076.319 +076.320 +076.321 +076.322 +076.323 +076.324 +076.325 +077.317 +077.318 +077.319 +077.320 +077.321 +077.322 +077.323 +077.324 +077.325 +078.317 +078.318 +078.319 +078.320 +078.321 +078.322 +078.323 +078.324 +079.317 +079.318 +079.319 +079.320 +079.321 +079.322 +079.323 +079.324 +080.317 +080.318 +080.319 +080.320 +080.321 +080.322 +080.323 +081.317 +081.318 +081.319 +081.320 +081.321 +081.322 +081.323 +082.317 +082.318 +082.319 +082.320 +082.321 +082.322 +083.317 +083.318 +083.319 +083.320 +083.321 +084.317 +084.318 +084.319 +084.321 +085.317 +085.318 +085.319 +086.317 +086.318 +087.317 +088.317 +090.302 +091.301 +091.302 +092.301 +092.302 +093.300 +093.301 +094.300 +094.301 +095.300 diff --git a/auxdir/CFIS/tiles_202510/tiles_P8.txt b/auxdir/CFIS/tiles_202510/tiles_P8.txt new file mode 100644 index 00000000..b46d5908 --- /dev/null +++ b/auxdir/CFIS/tiles_202510/tiles_P8.txt @@ -0,0 +1,6263 @@ +000.227 +000.228 +000.229 +000.230 +000.231 +000.232 +000.233 +000.234 +000.235 +000.236 +000.237 +001.227 +001.228 +001.229 +001.230 +001.231 +001.232 +001.233 +001.234 +001.235 +001.236 +001.237 +002.227 +002.228 +002.229 +002.230 +002.231 +002.232 +002.233 +002.234 +002.235 +002.236 +002.237 +003.227 +003.228 +003.229 +003.230 +003.231 +003.232 +003.233 +003.234 +003.235 +003.236 +003.237 +004.227 +004.228 +004.229 +004.230 +004.231 +004.232 +004.233 +004.234 +004.235 +004.236 +004.237 +005.227 +005.228 +005.229 +005.230 +005.231 +005.232 +005.233 +005.234 +005.235 +005.236 +005.237 +006.227 +006.228 +006.229 +006.230 +006.231 +006.232 +006.233 +006.234 +006.235 +006.236 +006.237 +007.227 +007.228 +007.229 +007.230 +007.231 +007.232 +007.233 +007.234 +007.235 +007.236 +007.237 +008.227 +008.228 +008.229 +008.230 +008.231 +008.232 +008.233 +008.234 +008.235 +008.236 +008.237 +009.227 +009.228 +009.229 +009.230 +009.231 +009.232 +009.233 +009.234 +009.235 +009.236 +009.237 +010.227 +010.228 +010.229 +010.230 +010.231 +010.232 +010.233 +010.234 +010.235 +010.236 +010.237 +011.227 +011.228 +011.229 +011.230 +011.231 +011.232 +011.233 +011.234 +011.235 +011.236 +011.237 +012.227 +012.228 +012.229 +012.230 +012.231 +012.232 +012.233 +012.234 +012.235 +012.236 +012.237 +013.227 +013.228 +013.229 +013.230 +013.231 +013.232 +013.233 +013.234 +013.235 +013.236 +013.237 +014.227 +014.228 +014.229 +014.230 +014.231 +014.232 +014.233 +014.234 +014.235 +014.236 +014.237 +015.227 +015.228 +015.229 +015.230 +015.231 +015.232 +015.233 +015.234 +015.235 +015.236 +015.237 +016.227 +016.228 +016.229 +016.230 +016.231 +016.232 +016.233 +016.234 +016.235 +016.236 +016.237 +017.227 +017.228 +017.229 +017.230 +017.231 +017.232 +017.233 +017.234 +017.235 +017.236 +017.237 +018.227 +018.228 +018.229 +018.230 +018.231 +018.232 +018.233 +018.234 +018.235 +018.236 +018.237 +019.227 +019.228 +019.229 +019.230 +019.231 +019.232 +019.233 +019.234 +019.235 +019.236 +019.237 +020.227 +020.228 +020.229 +020.230 +020.231 +020.232 +020.233 +020.234 +020.235 +020.236 +020.237 +021.228 +021.229 +021.230 +021.231 +021.232 +021.233 +021.234 +021.235 +021.236 +021.237 +022.228 +022.229 +022.230 +022.231 +022.232 +022.233 +022.234 +022.235 +022.236 +022.237 +023.228 +023.229 +023.230 +023.231 +023.232 +023.233 +023.234 +023.235 +023.236 +023.237 +024.228 +024.229 +024.230 +024.231 +024.232 +024.233 +024.234 +024.235 +024.236 +024.237 +024.350 +025.228 +025.229 +025.230 +025.231 +025.232 +025.233 +025.234 +025.235 +025.236 +025.237 +025.350 +026.228 +026.229 +026.230 +026.231 +026.232 +026.233 +026.234 +026.235 +026.236 +026.237 +026.349 +027.228 +027.229 +027.230 +027.231 +027.232 +027.233 +027.234 +027.235 +027.236 +027.237 +027.349 +027.350 +028.228 +028.229 +028.230 +028.231 +028.232 +028.233 +028.234 +028.235 +028.236 +028.237 +028.346 +028.348 +028.349 +028.350 +029.228 +029.229 +029.230 +029.231 +029.232 +029.233 +029.234 +029.235 +029.236 +029.237 +029.346 +029.348 +029.349 +030.228 +030.229 +030.230 +030.231 +030.232 +030.233 +030.234 +030.235 +030.236 +030.237 +030.345 +030.346 +030.347 +030.348 +030.349 +031.228 +031.229 +031.230 +031.231 +031.232 +031.233 +031.234 +031.235 +031.236 +031.237 +031.345 +031.346 +031.347 +031.349 +032.228 +032.229 +032.230 +032.231 +032.232 +032.233 +032.234 +032.235 +032.236 +032.237 +032.344 +032.345 +032.346 +032.347 +032.348 +033.228 +033.229 +033.230 +033.231 +033.232 +033.233 +033.234 +033.235 +033.236 +033.237 +033.344 +033.345 +033.346 +033.347 +033.348 +034.228 +034.229 +034.230 +034.231 +034.232 +034.233 +034.234 +034.235 +034.236 +034.237 +034.343 +034.344 +034.345 +034.346 +034.348 +035.221 +035.222 +035.223 +035.228 +035.229 +035.230 +035.231 +035.232 +035.233 +035.234 +035.235 +035.236 +035.237 +035.343 +035.344 +035.345 +035.346 +035.347 +036.221 +036.222 +036.223 +036.228 +036.229 +036.230 +036.231 +036.232 +036.233 +036.234 +036.235 +036.236 +036.237 +036.343 +036.344 +036.345 +036.346 +036.347 +037.221 +037.222 +037.223 +037.224 +037.228 +037.229 +037.230 +037.231 +037.232 +037.233 +037.234 +037.235 +037.236 +037.237 +037.343 +037.344 +037.345 +037.346 +037.347 +038.221 +038.222 +038.223 +038.224 +038.229 +038.230 +038.231 +038.232 +038.233 +038.234 +038.235 +038.236 +038.237 +038.343 +038.344 +038.345 +038.346 +039.221 +039.222 +039.223 +039.224 +039.230 +039.231 +039.232 +039.233 +039.234 +039.235 +039.236 +039.237 +039.343 +039.344 +039.345 +039.346 +040.221 +040.222 +040.223 +040.224 +040.230 +040.231 +040.232 +040.233 +040.234 +040.235 +040.236 +040.237 +040.343 +040.344 +040.345 +040.346 +041.222 +041.223 +041.224 +041.230 +041.231 +041.232 +041.233 +041.234 +041.235 +041.236 +041.237 +041.343 +041.344 +041.345 +042.230 +042.231 +042.232 +042.233 +042.234 +042.235 +042.236 +042.237 +042.342 +042.343 +042.344 +042.345 +043.230 +043.231 +043.232 +043.233 +043.234 +043.235 +043.236 +043.237 +043.342 +043.343 +043.344 +043.345 +044.230 +044.231 +044.232 +044.233 +044.234 +044.235 +044.236 +044.237 +044.342 +044.343 +044.344 +045.230 +045.231 +045.232 +045.233 +045.234 +045.235 +045.236 +045.237 +045.342 +045.343 +045.344 +046.230 +046.231 +046.232 +046.233 +046.234 +046.235 +046.236 +046.237 +046.342 +046.343 +046.344 +047.230 +047.231 +047.232 +047.233 +047.234 +047.235 +047.236 +047.237 +047.341 +047.342 +047.343 +048.230 +048.231 +048.232 +048.233 +048.234 +048.235 +048.236 +048.237 +048.340 +048.341 +048.342 +048.343 +049.230 +049.231 +049.232 +049.233 +049.234 +049.235 +049.236 +049.237 +049.340 +049.341 +049.342 +050.232 +050.233 +050.234 +050.235 +050.236 +050.237 +050.339 +050.340 +050.341 +050.342 +051.217 +051.218 +051.219 +051.232 +051.233 +051.234 +051.235 +051.236 +051.237 +051.339 +051.340 +051.341 +052.217 +052.218 +052.219 +052.233 +052.234 +052.235 +052.236 +052.237 +052.338 +052.339 +052.340 +053.217 +053.218 +053.219 +053.233 +053.234 +053.235 +053.236 +053.237 +053.338 +053.339 +053.340 +054.217 +054.218 +054.219 +054.233 +054.234 +054.235 +054.236 +054.237 +054.337 +054.338 +054.339 +054.340 +055.221 +055.222 +055.236 +055.237 +055.337 +055.338 +055.339 +056.220 +056.221 +056.222 +056.336 +056.337 +056.338 +056.339 +057.220 +057.221 +057.222 +057.336 +057.337 +057.338 +057.345 +058.220 +058.221 +058.336 +058.337 +058.338 +058.345 +059.328 +059.335 +059.336 +059.337 +059.338 +059.343 +059.345 +060.328 +060.334 +060.335 +060.336 +060.337 +060.338 +060.343 +060.344 +061.327 +061.328 +061.334 +061.335 +061.336 +061.337 +061.338 +061.343 +061.344 +062.327 +062.328 +062.333 +062.334 +062.335 +062.336 +062.337 +062.343 +062.344 +063.327 +063.328 +063.333 +063.334 +063.335 +063.336 +063.337 +063.342 +063.343 +063.344 +064.327 +064.328 +064.333 +064.334 +064.335 +064.336 +064.337 +064.342 +064.343 +065.327 +065.328 +065.333 +065.334 +065.335 +065.336 +065.337 +065.341 +065.342 +065.343 +066.168 +066.169 +066.170 +066.171 +066.172 +066.173 +066.174 +066.327 +066.328 +066.332 +066.333 +066.334 +066.335 +066.336 +066.337 +066.341 +066.342 +066.343 +067.168 +067.169 +067.170 +067.171 +067.172 +067.173 +067.174 +067.327 +067.328 +067.332 +067.333 +067.334 +067.335 +067.336 +067.337 +067.341 +067.342 +067.343 +068.167 +068.168 +068.169 +068.170 +068.171 +068.172 +068.173 +068.174 +068.327 +068.328 +068.331 +068.332 +068.333 +068.334 +068.335 +068.336 +068.337 +068.340 +068.341 +068.342 +068.343 +069.167 +069.168 +069.169 +069.170 +069.171 +069.172 +069.173 +069.174 +069.327 +069.328 +069.331 +069.332 +069.333 +069.334 +069.335 +069.336 +069.337 +069.340 +069.341 +069.342 +069.343 +070.167 +070.168 +070.169 +070.170 +070.171 +070.172 +070.173 +070.174 +070.327 +070.328 +070.331 +070.332 +070.333 +070.334 +070.335 +070.336 +070.337 +070.340 +070.341 +070.342 +070.343 +071.167 +071.168 +071.169 +071.170 +071.171 +071.172 +071.173 +071.174 +071.327 +071.328 +071.330 +071.331 +071.332 +071.333 +071.334 +071.335 +071.336 +071.337 +071.340 +071.341 +071.342 +071.343 +072.167 +072.168 +072.169 +072.170 +072.171 +072.172 +072.173 +072.174 +072.327 +072.328 +072.329 +072.330 +072.331 +072.332 +072.333 +072.334 +072.335 +072.336 +072.337 +072.339 +072.340 +072.341 +072.342 +072.343 +073.167 +073.168 +073.169 +073.170 +073.171 +073.172 +073.173 +073.174 +073.327 +073.328 +073.329 +073.330 +073.331 +073.332 +073.333 +073.334 +073.335 +073.336 +073.337 +073.339 +073.340 +073.341 +073.342 +074.167 +074.168 +074.169 +074.170 +074.171 +074.172 +074.173 +074.174 +074.327 +074.328 +074.329 +074.330 +074.331 +074.332 +074.333 +074.334 +074.335 +074.336 +074.337 +074.339 +074.340 +074.341 +074.342 +075.167 +075.168 +075.169 +075.170 +075.171 +075.172 +075.173 +075.174 +075.327 +075.328 +075.329 +075.330 +075.331 +075.332 +075.333 +075.334 +075.335 +075.336 +075.337 +075.338 +075.339 +075.340 +075.341 +075.342 +076.168 +076.169 +076.170 +076.171 +076.172 +076.173 +076.316 +076.326 +076.327 +076.328 +076.329 +076.330 +076.331 +076.332 +076.333 +076.334 +076.335 +076.336 +076.337 +076.338 +076.339 +076.340 +076.341 +076.342 +077.316 +077.326 +077.327 +077.328 +077.329 +077.330 +077.331 +077.332 +077.333 +077.334 +077.335 +077.336 +077.337 +077.338 +077.339 +077.340 +077.341 +077.342 +078.315 +078.316 +078.325 +078.326 +078.327 +078.328 +078.329 +078.330 +078.331 +078.332 +078.333 +078.334 +078.335 +078.336 +078.337 +078.338 +078.339 +078.340 +078.341 +079.314 +079.315 +079.316 +079.325 +079.326 +079.327 +079.328 +079.329 +079.330 +079.331 +079.332 +079.333 +079.334 +079.335 +079.336 +079.337 +079.338 +079.339 +079.340 +079.341 +079.343 +080.314 +080.315 +080.316 +080.324 +080.325 +080.326 +080.327 +080.328 +080.329 +080.330 +080.331 +080.332 +080.333 +080.334 +080.335 +080.336 +080.337 +080.338 +080.339 +080.340 +080.341 +080.343 +081.313 +081.314 +081.315 +081.316 +081.324 +081.325 +081.326 +081.327 +081.328 +081.329 +081.330 +081.331 +081.332 +081.333 +081.334 +081.335 +081.336 +081.337 +081.338 +081.339 +081.341 +081.343 +082.312 +082.313 +082.314 +082.315 +082.316 +082.323 +082.324 +082.325 +082.326 +082.327 +082.328 +082.329 +082.330 +082.331 +082.333 +082.334 +082.335 +082.336 +082.337 +082.338 +082.339 +083.312 +083.313 +083.314 +083.315 +083.316 +083.322 +083.323 +083.324 +083.325 +083.326 +083.327 +083.328 +083.329 +083.330 +083.331 +083.333 +083.334 +083.335 +083.336 +083.337 +083.338 +083.339 +083.342 +084.311 +084.312 +084.313 +084.314 +084.315 +084.316 +084.320 +084.322 +084.323 +084.324 +084.325 +084.326 +084.327 +084.328 +084.329 +084.330 +084.331 +084.332 +084.333 +084.334 +084.335 +084.336 +084.337 +084.338 +084.339 +084.342 +085.311 +085.312 +085.313 +085.314 +085.315 +085.316 +085.320 +085.321 +085.322 +085.323 +085.324 +085.325 +085.326 +085.327 +085.328 +085.329 +085.330 +085.331 +085.332 +085.333 +085.334 +085.335 +085.336 +085.337 +085.338 +085.342 +086.310 +086.311 +086.312 +086.313 +086.314 +086.315 +086.316 +086.319 +086.320 +086.321 +086.322 +086.323 +086.324 +086.325 +086.326 +086.327 +086.328 +086.329 +086.330 +086.332 +086.333 +086.334 +086.335 +086.336 +086.337 +086.338 +086.342 +087.310 +087.311 +087.312 +087.313 +087.314 +087.315 +087.316 +087.318 +087.319 +087.320 +087.321 +087.322 +087.323 +087.324 +087.325 +087.326 +087.327 +087.328 +087.329 +087.330 +087.331 +087.332 +087.333 +087.334 +087.335 +087.336 +087.337 +087.338 +087.339 +087.341 +087.342 +088.309 +088.310 +088.311 +088.312 +088.313 +088.314 +088.315 +088.316 +088.318 +088.319 +088.320 +088.321 +088.322 +088.323 +088.324 +088.325 +088.326 +088.327 +088.328 +088.329 +088.330 +088.331 +088.332 +088.333 +088.334 +088.335 +088.336 +088.337 +088.339 +088.341 +089.309 +089.310 +089.311 +089.312 +089.313 +089.314 +089.315 +089.316 +089.317 +089.318 +089.319 +089.320 +089.321 +089.322 +089.323 +089.324 +089.325 +089.326 +089.327 +089.328 +089.329 +089.330 +089.331 +089.333 +089.334 +089.335 +089.336 +089.337 +089.339 +089.341 +090.309 +090.310 +090.311 +090.312 +090.313 +090.314 +090.315 +090.316 +090.317 +090.318 +090.319 +090.320 +090.321 +090.322 +090.323 +090.324 +090.325 +090.326 +090.327 +090.328 +090.329 +090.330 +090.331 +090.332 +090.333 +090.334 +090.335 +090.336 +090.337 +090.339 +090.341 +091.308 +091.309 +091.310 +091.311 +091.312 +091.313 +091.314 +091.315 +091.316 +091.317 +091.318 +091.319 +091.320 +091.321 +091.322 +091.323 +091.324 +091.325 +091.326 +091.328 +091.329 +091.330 +091.331 +091.332 +091.333 +091.334 +091.335 +091.336 +091.337 +091.338 +091.339 +091.341 +092.308 +092.309 +092.310 +092.311 +092.312 +092.313 +092.314 +092.315 +092.316 +092.317 +092.318 +092.319 +092.320 +092.321 +092.322 +092.323 +092.324 +092.325 +092.326 +092.328 +092.329 +092.330 +092.331 +092.332 +092.333 +092.334 +092.335 +092.336 +092.337 +092.338 +092.340 +092.341 +093.307 +093.308 +093.309 +093.310 +093.311 +093.312 +093.313 +093.314 +093.315 +093.316 +093.317 +093.318 +093.319 +093.320 +093.321 +093.322 +093.323 +093.324 +093.325 +093.328 +093.329 +093.330 +093.331 +093.332 +093.333 +093.334 +093.335 +093.336 +093.337 +093.338 +093.340 +094.306 +094.307 +094.308 +094.309 +094.310 +094.311 +094.312 +094.313 +094.314 +094.315 +094.316 +094.317 +094.318 +094.319 +094.320 +094.321 +094.322 +094.323 +094.327 +094.328 +094.329 +094.330 +094.331 +094.332 +094.333 +094.334 +094.335 +094.336 +094.337 +094.338 +094.340 +095.306 +095.307 +095.308 +095.309 +095.310 +095.311 +095.312 +095.313 +095.314 +095.315 +095.316 +095.317 +095.318 +095.319 +095.320 +095.321 +095.322 +095.327 +095.328 +095.329 +095.330 +095.331 +095.332 +095.333 +095.334 +095.335 +095.336 +095.337 +095.338 +095.340 +096.305 +096.306 +096.307 +096.308 +096.309 +096.310 +096.311 +096.312 +096.313 +096.314 +096.315 +096.316 +096.317 +096.318 +096.319 +096.320 +096.321 +096.322 +096.327 +096.328 +096.329 +096.330 +096.331 +096.332 +096.333 +096.334 +096.335 +096.336 +096.337 +096.338 +096.340 +097.305 +097.306 +097.307 +097.308 +097.309 +097.310 +097.311 +097.312 +097.313 +097.314 +097.315 +097.316 +097.317 +097.318 +097.319 +097.320 +097.321 +097.322 +097.327 +097.328 +097.329 +097.330 +097.331 +097.332 +097.333 +097.334 +097.335 +097.336 +097.337 +098.304 +098.305 +098.306 +098.307 +098.308 +098.309 +098.310 +098.311 +098.312 +098.313 +098.314 +098.315 +098.316 +098.317 +098.318 +098.319 +098.320 +098.321 +098.322 +098.327 +098.328 +098.329 +098.330 +098.331 +098.332 +098.333 +098.334 +098.335 +098.336 +098.337 +098.338 +098.339 +099.303 +099.304 +099.305 +099.306 +099.307 +099.308 +099.309 +099.310 +099.311 +099.312 +099.313 +099.314 +099.315 +099.316 +099.317 +099.318 +099.319 +099.320 +099.321 +099.322 +099.327 +099.328 +099.329 +099.330 +099.331 +099.332 +099.333 +099.334 +099.335 +099.336 +099.337 +099.338 +099.339 +100.303 +100.304 +100.305 +100.306 +100.307 +100.308 +100.309 +100.310 +100.311 +100.312 +100.313 +100.314 +100.315 +100.316 +100.317 +100.318 +100.319 +100.320 +100.321 +100.322 +100.327 +100.328 +100.329 +100.330 +100.331 +100.332 +100.333 +100.334 +100.335 +100.336 +100.337 +100.338 +100.339 +101.302 +101.303 +101.304 +101.305 +101.306 +101.307 +101.308 +101.309 +101.310 +101.311 +101.312 +101.313 +101.314 +101.315 +101.316 +101.317 +101.318 +101.319 +101.320 +101.321 +101.322 +101.328 +101.329 +101.330 +101.331 +101.332 +101.333 +101.334 +101.335 +101.336 +101.337 +101.338 +101.339 +102.302 +102.303 +102.304 +102.305 +102.306 +102.307 +102.308 +102.309 +102.310 +102.311 +102.312 +102.313 +102.314 +102.315 +102.316 +102.317 +102.318 +102.319 +102.320 +102.321 +102.322 +102.327 +102.328 +102.329 +102.330 +102.331 +102.332 +102.333 +102.334 +102.335 +102.336 +102.337 +102.338 +103.301 +103.302 +103.303 +103.304 +103.305 +103.306 +103.307 +103.308 +103.309 +103.310 +103.311 +103.312 +103.313 +103.314 +103.315 +103.316 +103.317 +103.318 +103.319 +103.320 +103.321 +103.322 +103.327 +103.328 +103.329 +103.330 +103.331 +103.332 +103.333 +103.334 +103.335 +103.336 +103.337 +103.338 +104.301 +104.302 +104.303 +104.304 +104.305 +104.306 +104.307 +104.308 +104.309 +104.310 +104.311 +104.312 +104.313 +104.314 +104.315 +104.316 +104.317 +104.318 +104.319 +104.320 +104.321 +104.322 +104.327 +104.328 +104.329 +104.330 +104.331 +104.332 +104.333 +104.334 +104.335 +104.336 +104.337 +104.338 +105.301 +105.302 +105.303 +105.304 +105.305 +105.306 +105.307 +105.308 +105.309 +105.310 +105.311 +105.312 +105.313 +105.314 +105.315 +105.316 +105.317 +105.318 +105.319 +105.320 +105.321 +105.322 +105.326 +105.327 +105.328 +105.329 +105.330 +105.331 +105.332 +105.333 +105.334 +105.335 +105.336 +105.337 +105.338 +106.300 +106.301 +106.302 +106.303 +106.304 +106.305 +106.306 +106.307 +106.308 +106.309 +106.310 +106.311 +106.312 +106.313 +106.314 +106.315 +106.317 +106.318 +106.319 +106.320 +106.321 +106.326 +106.327 +106.328 +106.329 +106.330 +106.331 +106.332 +106.333 +106.334 +106.335 +106.336 +106.337 +106.338 +107.299 +107.300 +107.301 +107.302 +107.303 +107.304 +107.305 +107.306 +107.307 +107.308 +107.309 +107.310 +107.311 +107.312 +107.313 +107.314 +107.317 +107.318 +107.319 +107.320 +107.321 +107.326 +107.327 +107.328 +107.329 +107.330 +107.331 +107.332 +107.333 +107.334 +107.335 +107.336 +107.337 +108.299 +108.300 +108.301 +108.302 +108.303 +108.304 +108.305 +108.306 +108.307 +108.308 +108.309 +108.310 +108.311 +108.312 +108.313 +108.314 +108.317 +108.318 +108.319 +108.320 +108.321 +108.325 +108.326 +108.327 +108.328 +108.329 +108.330 +108.331 +108.332 +108.333 +108.334 +108.335 +108.336 +108.337 +109.298 +109.299 +109.300 +109.301 +109.302 +109.303 +109.304 +109.305 +109.306 +109.307 +109.308 +109.309 +109.310 +109.311 +109.312 +109.313 +109.317 +109.318 +109.319 +109.320 +109.325 +109.326 +109.327 +109.328 +109.329 +109.330 +109.331 +109.332 +109.333 +109.334 +109.335 +109.336 +109.337 +110.297 +110.298 +110.300 +110.301 +110.302 +110.303 +110.304 +110.305 +110.306 +110.307 +110.308 +110.309 +110.310 +110.311 +110.312 +110.317 +110.318 +110.319 +110.320 +110.325 +110.326 +110.327 +110.328 +110.329 +110.330 +110.331 +110.332 +110.333 +110.334 +110.335 +110.336 +110.337 +111.297 +111.300 +111.301 +111.302 +111.303 +111.304 +111.305 +111.307 +111.308 +111.309 +111.310 +111.311 +111.312 +111.317 +111.318 +111.319 +111.320 +111.325 +111.326 +111.327 +111.328 +111.329 +111.330 +111.331 +111.332 +111.333 +111.334 +111.335 +111.336 +112.300 +112.301 +112.302 +112.303 +112.304 +112.305 +112.307 +112.308 +112.309 +112.310 +112.311 +112.317 +112.318 +112.319 +112.324 +112.325 +112.326 +112.327 +112.328 +112.329 +112.330 +112.331 +112.332 +112.333 +112.334 +112.335 +112.336 +113.300 +113.301 +113.302 +113.303 +113.304 +113.307 +113.308 +113.309 +113.310 +113.311 +113.317 +113.318 +113.323 +113.324 +113.325 +113.326 +113.327 +113.328 +113.329 +113.330 +113.331 +113.332 +113.333 +113.334 +113.335 +113.336 +114.300 +114.301 +114.302 +114.303 +114.307 +114.308 +114.309 +114.310 +114.317 +114.318 +114.323 +114.324 +114.325 +114.326 +114.327 +114.328 +114.329 +114.330 +114.331 +114.332 +114.333 +114.334 +114.335 +114.336 +115.300 +115.301 +115.302 +115.303 +115.307 +115.308 +115.309 +115.310 +115.317 +115.323 +115.324 +115.325 +115.326 +115.327 +115.328 +115.329 +115.330 +115.331 +115.332 +115.333 +115.334 +115.335 +115.336 +116.300 +116.301 +116.302 +116.307 +116.308 +116.309 +116.310 +116.316 +116.317 +116.322 +116.323 +116.324 +116.325 +116.326 +116.327 +116.328 +116.329 +116.330 +116.331 +116.332 +116.333 +116.334 +116.335 +117.300 +117.301 +117.302 +117.307 +117.308 +117.309 +117.316 +117.322 +117.323 +117.324 +117.325 +117.326 +117.327 +117.328 +117.329 +117.330 +117.331 +117.332 +117.333 +117.334 +117.335 +118.300 +118.301 +118.302 +118.307 +118.308 +118.309 +118.315 +118.316 +118.322 +118.323 +118.324 +118.325 +118.326 +118.327 +118.328 +118.329 +118.330 +118.331 +118.332 +118.333 +118.334 +118.335 +119.300 +119.301 +119.307 +119.308 +119.314 +119.315 +119.316 +119.321 +119.322 +119.323 +119.324 +119.325 +119.326 +119.327 +119.328 +119.329 +119.330 +119.331 +119.332 +119.333 +119.334 +119.335 +120.300 +120.301 +120.307 +120.308 +120.314 +120.315 +120.316 +120.321 +120.322 +120.323 +120.324 +120.325 +120.326 +120.327 +120.328 +120.329 +120.330 +120.331 +120.332 +120.333 +120.334 +120.335 +121.300 +121.307 +121.313 +121.314 +121.315 +121.316 +121.321 +121.322 +121.323 +121.324 +121.325 +121.326 +121.327 +121.328 +121.329 +121.330 +121.331 +121.332 +121.333 +121.334 +121.335 +122.313 +122.314 +122.315 +122.321 +122.322 +122.323 +122.324 +122.325 +122.326 +122.327 +122.328 +122.329 +122.330 +122.331 +122.332 +122.333 +122.334 +123.312 +123.313 +123.314 +123.315 +123.320 +123.321 +123.322 +123.323 +123.324 +123.325 +123.326 +123.327 +123.328 +123.329 +123.330 +123.331 +123.332 +123.333 +123.334 +124.312 +124.313 +124.314 +124.320 +124.321 +124.322 +124.323 +124.324 +124.325 +124.326 +124.327 +124.328 +124.329 +124.330 +124.331 +124.332 +124.333 +124.334 +125.311 +125.312 +125.313 +125.314 +125.319 +125.320 +125.321 +125.322 +125.323 +125.324 +125.325 +125.326 +125.327 +125.328 +125.329 +125.330 +125.331 +125.332 +125.333 +125.334 +126.311 +126.312 +126.313 +126.314 +126.319 +126.320 +126.321 +126.322 +126.323 +126.324 +126.325 +126.326 +126.327 +126.328 +126.329 +126.330 +126.331 +126.332 +126.333 +126.334 +127.310 +127.311 +127.312 +127.313 +127.319 +127.320 +127.321 +127.322 +127.323 +127.324 +127.325 +127.326 +127.327 +127.328 +127.329 +127.330 +127.331 +127.332 +127.333 +128.310 +128.311 +128.312 +128.313 +128.318 +128.319 +128.320 +128.321 +128.322 +128.323 +128.324 +128.325 +128.326 +128.327 +128.328 +128.329 +128.330 +128.331 +128.332 +128.333 +129.309 +129.310 +129.311 +129.312 +129.318 +129.319 +129.320 +129.321 +129.322 +129.323 +129.324 +129.325 +129.326 +129.327 +129.328 +129.329 +129.330 +129.331 +129.332 +129.333 +130.309 +130.310 +130.311 +130.312 +130.317 +130.318 +130.319 +130.320 +130.321 +130.322 +130.323 +130.324 +130.325 +130.326 +130.327 +130.328 +130.329 +130.330 +130.331 +130.332 +130.333 +131.308 +131.309 +131.310 +131.311 +131.312 +131.317 +131.318 +131.319 +131.320 +131.321 +131.322 +131.323 +131.324 +131.325 +131.326 +131.327 +131.328 +131.329 +131.330 +131.331 +131.332 +131.333 +132.308 +132.309 +132.310 +132.311 +132.312 +132.317 +132.318 +132.319 +132.320 +132.321 +132.322 +132.323 +132.324 +132.325 +132.326 +132.327 +132.328 +132.329 +132.330 +132.331 +132.332 +133.307 +133.308 +133.309 +133.310 +133.311 +133.316 +133.317 +133.318 +133.319 +133.320 +133.321 +133.322 +133.323 +133.324 +133.325 +133.326 +133.327 +133.328 +133.329 +133.330 +133.331 +133.332 +134.307 +134.308 +134.309 +134.310 +134.311 +134.316 +134.317 +134.318 +134.319 +134.320 +134.321 +134.322 +134.323 +134.324 +134.325 +134.326 +134.327 +134.328 +134.329 +134.330 +134.331 +134.332 +135.306 +135.307 +135.308 +135.309 +135.310 +135.315 +135.316 +135.317 +135.318 +135.319 +135.320 +135.321 +135.322 +135.323 +135.324 +135.325 +135.326 +135.327 +135.328 +135.329 +135.330 +135.331 +135.332 +136.306 +136.307 +136.308 +136.309 +136.310 +136.315 +136.316 +136.317 +136.318 +136.319 +136.320 +136.321 +136.322 +136.323 +136.324 +136.325 +136.326 +136.327 +136.328 +136.329 +136.330 +136.331 +136.332 +137.305 +137.306 +137.307 +137.308 +137.309 +137.310 +137.315 +137.316 +137.317 +137.318 +137.319 +137.320 +137.321 +137.322 +137.323 +137.324 +137.325 +137.326 +137.327 +137.328 +137.329 +137.330 +137.331 +138.304 +138.305 +138.306 +138.307 +138.308 +138.309 +138.314 +138.315 +138.316 +138.317 +138.318 +138.319 +138.320 +138.321 +138.322 +138.323 +138.324 +138.325 +138.326 +138.327 +138.328 +138.329 +138.330 +138.331 +139.304 +139.305 +139.306 +139.307 +139.308 +139.309 +139.314 +139.315 +139.316 +139.317 +139.318 +139.319 +139.320 +139.321 +139.322 +139.323 +139.324 +139.325 +139.326 +139.327 +139.328 +139.329 +139.330 +139.331 +140.303 +140.304 +140.305 +140.306 +140.307 +140.308 +140.313 +140.314 +140.315 +140.316 +140.317 +140.318 +140.319 +140.320 +140.321 +140.322 +140.323 +140.324 +140.325 +140.326 +140.327 +140.328 +140.329 +140.330 +140.331 +141.303 +141.304 +141.305 +141.306 +141.307 +141.308 +141.313 +141.314 +141.315 +141.316 +141.317 +141.318 +141.319 +141.320 +141.321 +141.322 +141.323 +141.324 +141.325 +141.326 +141.327 +141.328 +141.329 +141.330 +141.331 +142.302 +142.303 +142.304 +142.305 +142.306 +142.307 +142.308 +142.313 +142.314 +142.315 +142.316 +142.317 +142.318 +142.319 +142.320 +142.321 +142.322 +142.323 +142.324 +142.325 +142.326 +142.327 +142.328 +142.329 +142.330 +143.302 +143.303 +143.304 +143.305 +143.306 +143.307 +143.312 +143.313 +143.314 +143.315 +143.316 +143.317 +143.318 +143.319 +143.320 +143.321 +143.322 +143.323 +143.324 +143.325 +143.326 +143.327 +143.328 +143.329 +143.330 +144.301 +144.302 +144.303 +144.304 +144.305 +144.306 +144.307 +144.312 +144.313 +144.314 +144.315 +144.316 +144.317 +144.318 +144.319 +144.320 +144.321 +144.322 +144.323 +144.324 +144.325 +144.326 +144.327 +144.328 +144.329 +144.330 +145.301 +145.302 +145.303 +145.304 +145.305 +145.306 +145.311 +145.312 +145.313 +145.314 +145.315 +145.316 +145.317 +145.318 +145.319 +145.320 +145.321 +145.322 +145.323 +145.324 +145.325 +145.326 +145.327 +145.328 +145.329 +145.330 +146.300 +146.301 +146.302 +146.303 +146.304 +146.305 +146.306 +146.311 +146.312 +146.313 +146.314 +146.315 +146.316 +146.317 +146.318 +146.319 +146.320 +146.321 +146.322 +146.323 +146.324 +146.325 +146.326 +146.327 +146.328 +146.329 +146.330 +147.300 +147.301 +147.302 +147.303 +147.304 +147.305 +147.306 +147.311 +147.312 +147.313 +147.314 +147.315 +147.316 +147.317 +147.318 +147.319 +147.320 +147.321 +147.322 +147.323 +147.324 +147.325 +147.326 +147.327 +147.328 +147.329 +147.330 +148.299 +148.300 +148.301 +148.302 +148.303 +148.304 +148.305 +148.310 +148.311 +148.312 +148.313 +148.314 +148.315 +148.316 +148.317 +148.318 +148.319 +148.320 +148.321 +148.322 +148.323 +148.324 +148.325 +148.326 +148.327 +148.328 +148.329 +149.299 +149.300 +149.301 +149.302 +149.303 +149.304 +149.310 +149.311 +149.312 +149.313 +149.314 +149.315 +149.316 +149.317 +149.318 +149.319 +149.320 +149.321 +149.322 +149.323 +149.324 +149.325 +149.326 +149.327 +149.328 +149.329 +150.298 +150.299 +150.300 +150.301 +150.302 +150.303 +150.304 +150.310 +150.311 +150.312 +150.313 +150.314 +150.315 +150.316 +150.317 +150.318 +150.319 +150.320 +150.321 +150.322 +150.323 +150.324 +150.325 +150.326 +150.327 +150.328 +150.329 +151.298 +151.299 +151.300 +151.301 +151.302 +151.303 +151.304 +151.309 +151.310 +151.311 +151.312 +151.313 +151.314 +151.315 +151.316 +151.317 +151.318 +151.319 +151.320 +151.321 +151.322 +151.323 +151.324 +151.325 +151.326 +151.327 +151.328 +151.329 +152.297 +152.298 +152.299 +152.300 +152.301 +152.302 +152.303 +152.309 +152.310 +152.311 +152.312 +152.313 +152.314 +152.315 +152.316 +152.317 +152.318 +152.319 +152.320 +152.321 +152.322 +152.323 +152.324 +152.325 +152.326 +152.327 +152.328 +152.329 +153.297 +153.298 +153.299 +153.300 +153.301 +153.302 +153.303 +153.309 +153.310 +153.311 +153.312 +153.313 +153.314 +153.315 +153.316 +153.317 +153.318 +153.319 +153.320 +153.321 +153.322 +153.323 +153.324 +153.325 +153.326 +153.327 +153.328 +154.297 +154.298 +154.299 +154.300 +154.301 +154.302 +154.308 +154.309 +154.310 +154.311 +154.312 +154.313 +154.314 +154.315 +154.316 +154.317 +154.318 +154.319 +154.320 +154.321 +154.322 +154.323 +154.324 +154.325 +154.326 +154.327 +154.328 +155.288 +155.297 +155.298 +155.299 +155.300 +155.301 +155.302 +155.308 +155.309 +155.310 +155.311 +155.312 +155.313 +155.314 +155.315 +155.316 +155.317 +155.318 +155.319 +155.320 +155.321 +155.322 +155.323 +155.324 +155.325 +155.326 +155.327 +155.328 +156.288 +156.297 +156.298 +156.299 +156.300 +156.301 +156.307 +156.308 +156.309 +156.310 +156.311 +156.312 +156.313 +156.314 +156.315 +156.316 +156.317 +156.318 +156.319 +156.320 +156.321 +156.322 +156.323 +156.324 +156.325 +156.326 +156.327 +156.328 +157.288 +157.297 +157.298 +157.299 +157.300 +157.307 +157.308 +157.309 +157.310 +157.311 +157.312 +157.313 +157.314 +157.315 +157.316 +157.317 +157.318 +157.319 +157.320 +157.321 +157.322 +157.323 +157.324 +157.325 +157.326 +157.327 +158.287 +158.288 +158.297 +158.298 +158.299 +158.300 +158.307 +158.308 +158.309 +158.310 +158.311 +158.312 +158.313 +158.314 +158.315 +158.316 +158.317 +158.318 +158.319 +158.320 +158.321 +158.322 +158.323 +158.324 +158.325 +158.326 +158.327 +159.287 +159.288 +159.297 +159.298 +159.299 +159.300 +159.307 +159.308 +159.309 +159.310 +159.311 +159.312 +159.313 +159.314 +159.315 +159.316 +159.317 +159.318 +159.319 +159.320 +159.321 +159.322 +159.323 +159.324 +159.325 +159.326 +159.327 +160.286 +160.287 +160.288 +160.297 +160.298 +160.299 +160.300 +160.307 +160.308 +160.309 +160.310 +160.311 +160.312 +160.313 +160.314 +160.315 +160.316 +160.317 +160.318 +160.319 +160.320 +160.321 +160.322 +160.323 +160.324 +160.325 +160.326 +160.327 +161.286 +161.287 +161.288 +161.297 +161.298 +161.299 +161.307 +161.308 +161.309 +161.310 +161.311 +161.312 +161.313 +161.314 +161.315 +161.316 +161.317 +161.318 +161.319 +161.320 +161.321 +161.322 +161.323 +161.324 +161.325 +161.326 +161.327 +162.285 +162.286 +162.287 +162.288 +162.297 +162.298 +162.299 +162.307 +162.308 +162.309 +162.310 +162.311 +162.312 +162.313 +162.314 +162.315 +162.316 +162.317 +162.318 +162.319 +162.320 +162.321 +162.322 +162.323 +162.324 +162.325 +162.326 +163.284 +163.285 +163.286 +163.287 +163.288 +163.297 +163.298 +163.299 +163.307 +163.308 +163.309 +163.310 +163.311 +163.312 +163.313 +163.314 +163.315 +163.316 +163.317 +163.318 +163.319 +163.320 +163.321 +163.322 +163.323 +163.324 +163.325 +163.326 +164.284 +164.285 +164.286 +164.287 +164.288 +164.297 +164.298 +164.307 +164.308 +164.309 +164.310 +164.311 +164.312 +164.313 +164.314 +164.315 +164.316 +164.317 +164.318 +164.319 +164.320 +164.321 +164.322 +164.323 +164.324 +164.325 +164.326 +165.283 +165.284 +165.285 +165.286 +165.287 +165.288 +165.297 +165.298 +165.307 +165.308 +165.309 +165.310 +165.311 +165.312 +165.313 +165.314 +165.315 +165.316 +165.317 +165.318 +165.319 +165.320 +165.321 +165.322 +165.323 +165.324 +165.325 +165.326 +166.283 +166.284 +166.285 +166.286 +166.287 +166.288 +166.297 +166.307 +166.308 +166.309 +166.310 +166.311 +166.312 +166.313 +166.314 +166.315 +166.316 +166.317 +166.318 +166.319 +166.320 +166.321 +166.322 +166.323 +166.324 +166.325 +166.326 +167.282 +167.283 +167.284 +167.285 +167.286 +167.287 +167.288 +167.307 +167.308 +167.309 +167.310 +167.311 +167.312 +167.313 +167.314 +167.315 +167.316 +167.317 +167.318 +167.319 +167.320 +167.321 +167.322 +167.323 +167.324 +167.325 +167.326 +168.282 +168.283 +168.284 +168.285 +168.286 +168.287 +168.307 +168.308 +168.309 +168.310 +168.311 +168.312 +168.313 +168.314 +168.315 +168.316 +168.317 +168.318 +168.319 +168.320 +168.321 +168.322 +168.323 +168.324 +168.325 +169.281 +169.282 +169.283 +169.284 +169.285 +169.286 +169.287 +169.307 +169.308 +169.309 +169.310 +169.311 +169.312 +169.313 +169.314 +169.315 +169.316 +169.317 +169.318 +169.319 +169.320 +169.321 +169.322 +169.323 +169.324 +169.325 +170.280 +170.281 +170.282 +170.283 +170.284 +170.285 +170.286 +170.287 +170.307 +170.308 +170.309 +170.310 +170.311 +170.312 +170.313 +170.314 +170.315 +170.316 +170.317 +170.318 +170.319 +170.320 +170.321 +170.322 +170.323 +170.324 +170.325 +171.280 +171.281 +171.282 +171.283 +171.284 +171.285 +171.286 +171.307 +171.308 +171.309 +171.310 +171.311 +171.312 +171.313 +171.314 +171.315 +171.316 +171.317 +171.318 +171.319 +171.320 +171.321 +171.322 +171.323 +171.324 +171.325 +172.280 +172.281 +172.282 +172.283 +172.284 +172.285 +172.286 +172.306 +172.307 +172.308 +172.309 +172.310 +172.311 +172.312 +172.313 +172.314 +172.315 +172.316 +172.317 +172.318 +172.319 +172.320 +172.321 +172.322 +172.323 +172.324 +172.325 +173.280 +173.281 +173.282 +173.283 +173.284 +173.285 +173.306 +173.307 +173.308 +173.309 +173.310 +173.311 +173.312 +173.313 +173.314 +173.315 +173.316 +173.317 +173.318 +173.319 +173.320 +173.321 +173.322 +173.323 +173.324 +174.280 +174.281 +174.282 +174.283 +174.284 +174.285 +174.306 +174.307 +174.308 +174.309 +174.310 +174.311 +174.312 +174.313 +174.314 +174.315 +174.316 +174.317 +174.318 +174.319 +174.320 +174.321 +174.322 +174.323 +174.324 +175.280 +175.281 +175.282 +175.283 +175.284 +175.305 +175.306 +175.307 +175.308 +175.309 +175.310 +175.311 +175.312 +175.313 +175.314 +175.315 +175.316 +175.317 +175.318 +175.319 +175.320 +175.321 +175.322 +175.323 +175.324 +176.280 +176.281 +176.282 +176.283 +176.291 +176.305 +176.306 +176.307 +176.308 +176.309 +176.310 +176.311 +176.312 +176.313 +176.314 +176.315 +176.316 +176.317 +176.318 +176.319 +176.320 +176.321 +176.322 +176.323 +176.324 +177.280 +177.281 +177.282 +177.283 +177.290 +177.291 +177.305 +177.306 +177.307 +177.308 +177.309 +177.310 +177.311 +177.312 +177.313 +177.314 +177.315 +177.316 +177.317 +177.318 +177.319 +177.320 +177.321 +177.322 +177.323 +177.324 +178.280 +178.281 +178.282 +178.290 +178.291 +178.305 +178.306 +178.307 +178.308 +178.309 +178.310 +178.311 +178.312 +178.313 +178.314 +178.315 +178.316 +178.317 +178.318 +178.319 +178.320 +178.321 +178.322 +178.323 +179.280 +179.281 +179.282 +179.289 +179.290 +179.291 +179.305 +179.306 +179.307 +179.308 +179.309 +179.310 +179.311 +179.312 +179.313 +179.314 +179.315 +179.316 +179.317 +179.318 +179.319 +179.320 +179.321 +179.322 +179.323 +180.280 +180.281 +180.288 +180.289 +180.290 +180.305 +180.306 +180.307 +180.308 +180.309 +180.310 +180.311 +180.312 +180.313 +180.314 +180.315 +180.316 +180.317 +180.318 +180.319 +180.320 +180.321 +180.322 +180.323 +181.280 +181.281 +181.287 +181.288 +181.289 +181.290 +181.305 +181.306 +181.307 +181.309 +181.310 +181.311 +181.312 +181.313 +181.314 +181.315 +181.316 +181.317 +181.318 +181.319 +181.320 +181.321 +181.322 +181.323 +182.280 +182.287 +182.288 +182.289 +182.290 +182.305 +182.306 +182.307 +182.309 +182.310 +182.311 +182.312 +182.313 +182.314 +182.315 +182.316 +182.317 +182.318 +182.319 +182.320 +182.321 +182.322 +182.323 +183.287 +183.288 +183.289 +183.305 +183.306 +183.309 +183.310 +183.311 +183.313 +183.314 +183.315 +183.316 +183.317 +183.318 +183.319 +183.320 +183.321 +183.322 +184.286 +184.287 +184.288 +184.289 +184.305 +184.306 +184.309 +184.310 +184.311 +184.313 +184.314 +184.315 +184.316 +184.317 +184.318 +184.319 +184.320 +184.321 +184.322 +185.286 +185.287 +185.288 +185.305 +185.306 +185.309 +185.310 +185.311 +185.313 +185.314 +185.315 +185.316 +185.317 +185.318 +185.319 +185.320 +185.321 +185.322 +186.286 +186.287 +186.288 +186.305 +186.309 +186.310 +186.311 +186.313 +186.314 +186.315 +186.316 +186.317 +186.318 +186.319 +186.320 +186.321 +186.322 +187.286 +187.287 +187.305 +187.309 +187.310 +187.313 +187.314 +187.315 +187.316 +187.317 +187.318 +187.319 +187.320 +187.321 +187.322 +188.286 +188.287 +188.305 +188.309 +188.313 +188.314 +188.315 +188.316 +188.317 +188.318 +188.319 +188.320 +188.321 +189.286 +189.287 +189.309 +189.313 +189.314 +189.315 +189.316 +189.317 +189.318 +189.319 +189.320 +189.321 +190.286 +190.304 +190.309 +190.312 +190.313 +190.315 +190.316 +190.317 +190.318 +190.319 +190.320 +190.321 +191.286 +191.304 +191.309 +191.312 +191.313 +191.315 +191.316 +191.317 +191.318 +191.319 +191.320 +191.321 +192.303 +192.304 +192.312 +192.313 +192.315 +192.316 +192.317 +192.318 +192.319 +192.320 +192.321 +193.303 +193.304 +193.312 +193.313 +193.315 +193.316 +193.317 +193.318 +193.319 +193.320 +194.297 +194.303 +194.304 +194.311 +194.312 +194.315 +194.316 +194.317 +194.318 +194.319 +194.320 +195.297 +195.303 +195.304 +195.311 +195.312 +195.315 +195.316 +195.317 +195.318 +195.319 +195.320 +196.296 +196.297 +196.303 +196.304 +196.311 +196.315 +196.316 +196.317 +196.318 +196.319 +196.320 +197.296 +197.297 +197.303 +197.304 +197.311 +197.315 +197.316 +197.317 +197.318 +197.319 +197.320 +198.295 +198.296 +198.297 +198.303 +198.304 +198.311 +198.315 +198.316 +198.317 +198.318 +198.319 +199.295 +199.296 +199.297 +199.303 +199.304 +199.311 +199.315 +199.316 +199.317 +199.318 +199.319 +200.295 +200.296 +200.297 +200.303 +200.304 +200.315 +200.316 +200.317 +200.318 +200.319 +201.294 +201.295 +201.296 +201.297 +201.303 +201.304 +201.315 +201.316 +201.317 +201.318 +201.319 +202.294 +202.295 +202.296 +202.297 +202.303 +202.304 +202.315 +202.316 +202.317 +202.318 +203.293 +203.294 +203.295 +203.296 +203.297 +203.303 +203.315 +203.316 +203.317 +203.318 +204.293 +204.294 +204.295 +204.296 +204.297 +204.303 +204.315 +204.316 +204.317 +204.318 +205.292 +205.293 +205.294 +205.295 +205.296 +205.297 +205.314 +205.315 +205.316 +205.317 +205.318 +206.292 +206.293 +206.294 +206.295 +206.296 +206.297 +206.314 +206.315 +206.316 +206.317 +207.291 +207.292 +207.293 +207.294 +207.295 +207.296 +207.314 +207.315 +207.316 +207.317 +208.291 +208.292 +208.293 +208.294 +208.295 +208.296 +208.314 +208.315 +208.316 +208.317 +209.291 +209.292 +209.293 +209.294 +209.295 +209.313 +209.314 +209.315 +209.316 +209.317 +210.290 +210.291 +210.292 +210.293 +210.294 +210.295 +210.313 +210.314 +210.315 +210.316 +210.317 +211.290 +211.291 +211.292 +211.293 +211.294 +211.313 +211.314 +211.315 +211.316 +212.289 +212.290 +212.291 +212.292 +212.293 +212.294 +212.313 +212.314 +212.315 +212.316 +213.289 +213.290 +213.291 +213.292 +213.293 +213.294 +213.312 +213.313 +213.314 +213.315 +213.316 +214.288 +214.289 +214.290 +214.291 +214.292 +214.293 +214.312 +214.313 +214.314 +214.315 +214.316 +215.288 +215.289 +215.290 +215.291 +215.292 +215.293 +215.311 +215.312 +215.313 +215.314 +215.315 +216.288 +216.289 +216.290 +216.291 +216.292 +216.311 +216.312 +216.313 +216.314 +216.315 +217.287 +217.288 +217.289 +217.290 +217.291 +217.292 +217.311 +217.312 +217.313 +217.314 +217.315 +218.287 +218.288 +218.289 +218.290 +218.291 +218.311 +218.312 +218.313 +218.314 +218.315 +219.286 +219.287 +219.288 +219.289 +219.290 +219.291 +219.310 +219.311 +219.312 +219.313 +219.314 +220.286 +220.287 +220.288 +220.289 +220.290 +220.291 +220.309 +220.310 +220.311 +220.312 +220.313 +220.314 +221.285 +221.286 +221.287 +221.288 +221.289 +221.290 +221.305 +221.309 +221.310 +221.311 +221.312 +221.313 +221.314 +222.285 +222.286 +222.287 +222.288 +222.289 +222.290 +222.303 +222.305 +222.309 +222.310 +222.311 +222.312 +222.313 +223.285 +223.286 +223.287 +223.288 +223.289 +223.303 +223.305 +223.309 +223.310 +223.311 +223.312 +223.313 +224.284 +224.285 +224.286 +224.287 +224.288 +224.289 +224.303 +224.309 +224.310 +224.311 +224.312 +224.313 +225.284 +225.285 +225.286 +225.287 +225.288 +225.289 +225.302 +225.303 +225.304 +225.309 +225.310 +225.311 +225.312 +225.313 +226.283 +226.284 +226.285 +226.286 +226.287 +226.288 +226.302 +226.303 +226.304 +226.309 +226.310 +226.311 +226.312 +226.313 +227.283 +227.284 +227.285 +227.286 +227.287 +227.288 +227.301 +227.302 +227.303 +227.309 +227.310 +227.311 +227.312 +228.282 +228.283 +228.284 +228.285 +228.286 +228.287 +228.301 +228.302 +228.303 +228.309 +228.310 +228.311 +228.312 +229.282 +229.283 +229.284 +229.285 +229.286 +229.287 +229.301 +229.302 +229.303 +229.309 +229.310 +229.311 +229.312 +230.281 +230.282 +230.283 +230.284 +230.285 +230.286 +230.300 +230.301 +230.302 +230.303 +230.308 +230.309 +230.310 +230.311 +230.312 +231.281 +231.282 +231.283 +231.284 +231.285 +231.286 +231.300 +231.301 +231.302 +231.303 +231.308 +231.309 +231.310 +231.311 +231.312 +232.281 +232.282 +232.283 +232.284 +232.285 +232.300 +232.301 +232.302 +232.308 +232.309 +232.310 +232.311 +233.280 +233.281 +233.282 +233.283 +233.284 +233.285 +233.300 +233.301 +233.302 +233.308 +233.309 +233.310 +233.311 +234.280 +234.281 +234.282 +234.283 +234.284 +234.285 +234.300 +234.301 +234.302 +234.307 +234.308 +234.309 +234.310 +234.311 +235.279 +235.280 +235.281 +235.282 +235.283 +235.284 +235.300 +235.301 +235.307 +235.308 +235.309 +235.310 +235.311 +236.278 +236.279 +236.280 +236.281 +236.282 +236.283 +236.284 +236.300 +236.301 +236.307 +236.308 +236.309 +236.310 +236.311 +237.279 +237.280 +237.281 +237.282 +237.283 +237.300 +237.307 +237.308 +237.309 +237.310 +238.277 +238.279 +238.280 +238.281 +238.282 +238.283 +238.300 +238.306 +238.307 +238.308 +238.309 +238.310 +239.279 +239.280 +239.281 +239.282 +239.283 +239.306 +239.307 +239.308 +239.309 +239.310 +240.276 +240.279 +240.280 +240.281 +240.282 +240.306 +240.307 +240.308 +240.309 +240.310 +241.279 +241.280 +241.281 +241.282 +241.305 +241.306 +241.307 +241.309 +242.279 +242.280 +242.281 +242.282 +242.305 +242.306 +242.307 +242.309 +243.279 +243.280 +243.281 +243.305 +243.306 +243.307 +243.309 +244.279 +244.280 +244.305 +244.306 +244.307 +245.279 +245.280 +245.304 +245.305 +245.306 +246.279 +246.304 +246.305 +246.306 +247.279 +247.304 +247.305 +247.306 +248.304 +248.305 +249.303 +249.304 +249.305 +250.303 +250.304 +250.305 +251.303 +251.304 +251.305 +252.270 +252.302 +252.303 +252.304 +253.302 +253.303 +253.304 +254.302 +254.303 +254.304 +255.301 +255.302 +255.303 +255.304 +256.301 +256.302 +256.303 +257.300 +257.301 +257.302 +257.303 +258.300 +258.301 +258.302 +258.303 +259.300 +259.301 +259.302 +259.303 +260.300 +260.301 +260.302 +261.300 +261.301 +261.302 +262.300 +262.301 +262.302 +263.300 +263.301 +263.302 +264.300 +264.301 +264.302 +265.300 +265.301 +266.300 +266.301 +267.300 +267.301 +268.300 +269.300 +270.300 +271.288 +271.300 +272.288 +273.275 +273.288 +274.274 +274.275 +274.288 +275.273 +275.274 +275.275 +275.288 +276.273 +276.274 +276.275 +276.288 +277.272 +277.273 +277.274 +277.275 +277.288 +278.272 +278.273 +278.274 +278.275 +278.288 +279.271 +279.272 +279.273 +279.274 +279.275 +279.288 +280.271 +280.272 +280.273 +280.274 +280.275 +280.288 +281.271 +281.272 +281.273 +281.274 +281.275 +282.271 +282.272 +282.273 +282.274 +282.275 +283.271 +283.272 +283.273 +283.274 +284.271 +284.272 +284.273 +285.271 +285.272 +285.273 +286.271 +286.272 +287.271 +287.272 +288.271 +289.271 +299.183 +299.184 +299.185 +300.183 +300.184 +300.185 +301.183 +301.184 +301.185 +305.265 +307.264 +311.262 +313.260 +313.261 +317.258 +319.257 +331.257 +332.250 +332.257 +333.250 +333.256 +333.257 +334.249 +334.250 +334.255 +334.256 +334.257 +335.248 +335.249 +335.250 +335.255 +335.256 +335.257 +336.248 +336.249 +336.250 +336.254 +336.255 +336.256 +336.257 +337.247 +337.248 +337.249 +337.250 +337.253 +337.254 +337.255 +337.256 +337.257 +338.246 +338.247 +338.248 +338.249 +338.250 +338.253 +338.254 +338.255 +338.256 +338.257 +339.246 +339.247 +339.248 +339.249 +339.250 +339.252 +339.253 +339.254 +339.255 +339.256 +339.257 +340.246 +340.247 +340.248 +340.249 +340.250 +340.252 +340.253 +340.254 +340.255 +340.256 +340.257 +341.246 +341.247 +341.248 +341.249 +341.250 +341.251 +341.252 +341.253 +341.254 +341.255 +341.256 +341.257 +342.246 +342.247 +342.248 +342.249 +342.250 +342.251 +342.252 +342.253 +342.254 +342.255 +342.256 +342.257 +343.246 +343.247 +343.248 +343.249 +343.251 +343.252 +343.253 +343.254 +343.255 +343.256 +343.257 +344.246 +344.247 +344.248 +344.249 +344.251 +344.252 +344.253 +344.254 +344.255 +344.256 +344.257 +345.246 +345.247 +345.248 +345.251 +345.252 +345.253 +345.254 +345.255 +345.256 +345.257 +346.246 +346.247 +346.251 +346.252 +346.253 +346.254 +346.255 +346.256 +346.257 +347.246 +347.251 +347.252 +347.253 +347.254 +347.255 +347.256 +347.257 +348.251 +348.252 +348.253 +348.254 +348.255 +348.256 +348.257 +349.251 +349.252 +349.253 +349.254 +349.255 +349.256 +349.257 +350.251 +350.252 +350.253 +350.254 +350.255 +350.256 +350.257 +351.251 +351.252 +351.253 +351.254 +351.255 +351.256 +351.257 +352.251 +352.252 +352.253 +352.254 +352.255 +352.256 +352.257 +353.251 +353.252 +353.253 +353.254 +353.255 +353.256 +353.257 +354.251 +354.252 +354.253 +354.254 +354.255 +354.256 +354.257 +355.251 +355.252 +355.253 +355.254 +355.255 +355.256 +355.257 +356.251 +356.252 +356.253 +356.254 +356.255 +356.256 +356.257 +357.251 +357.252 +357.253 +357.254 +357.255 +357.256 +357.257 +358.250 +358.251 +358.252 +358.253 +358.254 +358.255 +358.256 +359.250 +359.251 +359.252 +359.253 +359.254 +359.255 +360.249 +360.250 +360.251 +360.252 +360.253 +360.254 +360.255 +361.249 +361.250 +361.251 +361.252 +361.253 +361.254 +362.248 +362.249 +362.250 +362.251 +362.252 +362.253 +363.248 +363.249 +363.250 +363.251 +363.252 +363.253 +364.247 +364.248 +364.249 +364.250 +364.251 +364.252 +365.246 +365.247 +365.248 +365.249 +365.250 +365.251 +366.246 +366.247 +366.248 +366.249 +366.250 +366.251 +367.245 +367.246 +367.247 +367.248 +367.249 +367.250 +367.251 +368.245 +368.246 +368.247 +368.248 +368.249 +368.250 +369.244 +369.245 +369.246 +369.247 +369.248 +369.249 +369.250 +370.243 +370.244 +370.245 +370.246 +370.247 +370.248 +370.249 +371.242 +371.243 +371.244 +371.245 +371.246 +371.247 +371.248 +371.249 +372.242 +372.243 +372.244 +372.245 +372.246 +372.247 +372.248 +373.241 +373.242 +373.243 +373.244 +373.245 +373.246 +373.247 +373.248 +374.241 +374.242 +374.243 +374.244 +374.245 +374.246 +374.247 +374.248 +375.240 +375.241 +375.242 +375.243 +375.244 +375.245 +375.246 +375.247 +376.239 +376.240 +376.241 +376.242 +376.243 +376.244 +376.245 +376.246 +376.247 +377.238 +377.239 +377.240 +377.241 +377.242 +377.243 +377.244 +377.245 +377.246 +377.247 +378.238 +378.239 +378.240 +378.241 +378.242 +378.243 +378.244 +378.245 +378.246 +378.247 +379.238 +379.239 +379.240 +379.241 +379.242 +379.243 +379.244 +379.245 +379.246 +379.247 +380.238 +380.239 +380.240 +380.241 +380.242 +380.243 +380.244 +380.245 +380.246 +380.247 +381.238 +381.239 +381.240 +381.241 +381.242 +381.243 +381.244 +381.245 +381.246 +381.247 +382.238 +382.239 +382.240 +382.241 +382.242 +382.243 +382.244 +382.245 +382.246 +382.247 +383.238 +383.239 +383.240 +383.241 +383.242 +383.243 +383.244 +383.245 +383.246 +383.247 +384.238 +384.239 +384.240 +384.241 +384.242 +384.243 +384.244 +384.245 +384.246 +384.247 +385.238 +385.239 +385.240 +385.241 +385.242 +385.243 +385.244 +385.245 +385.246 +385.247 +386.238 +386.239 +386.240 +386.241 +386.242 +386.243 +386.244 +386.245 +386.246 +386.247 +387.238 +387.239 +387.240 +387.241 +387.242 +387.243 +387.244 +387.245 +387.246 +388.238 +388.239 +388.240 +388.241 +388.242 +388.243 +388.244 +388.245 +388.246 +389.238 +389.239 +389.240 +389.241 +389.242 +389.243 +389.244 +389.245 +390.238 +390.239 +390.240 +390.241 +390.242 +390.243 +390.244 +390.245 +391.238 +391.239 +391.240 +391.241 +391.242 +391.243 +391.244 +392.238 +392.239 +392.240 +392.241 +392.242 +392.243 +393.238 +393.239 +393.240 +393.241 +393.242 +393.243 +394.238 +394.239 +394.240 +394.241 +394.242 +395.238 +395.239 +395.240 +395.241 +396.238 +396.239 +396.240 +396.241 +397.238 +397.239 +397.240 +398.238 +398.239 +398.240 +399.238 +399.239 +400.238 +400.239 +401.238 +402.238 +577.238 +577.240 +578.238 +578.240 +579.237 +579.238 +579.239 +579.240 +580.237 +580.238 +580.239 +580.240 +581.236 +581.237 +581.238 +581.239 +581.240 +582.236 +582.237 +582.238 +582.239 +582.240 +583.236 +583.237 +583.238 +583.239 +583.240 +584.235 +584.236 +584.237 +584.238 +584.239 +584.240 +585.235 +585.236 +585.237 +585.238 +585.239 +585.240 +586.234 +586.235 +586.236 +586.237 +586.238 +586.239 +587.234 +587.235 +587.236 +587.237 +587.238 +587.239 +588.234 +588.235 +588.236 +588.237 +588.238 +588.239 +588.240 +589.233 +589.234 +589.235 +589.236 +589.237 +589.238 +589.240 +590.233 +590.234 +590.235 +590.236 +590.237 +590.238 +591.232 +591.233 +591.234 +591.235 +591.236 +591.237 +591.238 +591.239 +592.232 +592.233 +592.234 +592.235 +592.236 +592.237 +592.239 +593.232 +593.233 +593.234 +593.235 +593.236 +593.238 +594.231 +594.232 +594.233 +594.234 +594.235 +594.236 +594.238 +595.231 +595.232 +595.233 +595.234 +595.235 +595.237 +595.238 +596.230 +596.231 +596.232 +596.233 +596.234 +596.235 +596.236 +596.237 +597.230 +597.231 +597.232 +597.233 +597.234 +597.235 +597.236 +597.237 +598.230 +598.231 +598.232 +598.233 +598.234 +598.235 +598.236 +598.237 +599.229 +599.230 +599.231 +599.232 +599.233 +599.234 +599.235 +599.236 +599.237 +600.229 +600.230 +600.231 +600.232 +600.233 +600.234 +600.235 +600.236 +600.237 +601.228 +601.229 +601.230 +601.231 +601.232 +601.233 +601.234 +601.235 +601.236 +601.237 +602.228 +602.229 +602.230 +602.231 +602.232 +602.233 +602.234 +602.235 +602.236 +602.237 +603.227 +603.228 +603.229 +603.230 +603.231 +603.232 +603.233 +603.234 +603.235 +603.236 +604.227 +604.228 +604.229 +604.230 +604.231 +604.232 +604.233 +604.234 +604.235 +604.236 +605.227 +605.228 +605.229 +605.230 +605.231 +605.232 +605.233 +605.234 +605.235 +605.236 +606.226 +606.227 +606.228 +606.229 +606.230 +606.231 +606.232 +606.233 +606.234 +606.235 +606.236 +607.226 +607.227 +607.228 +607.229 +607.230 +607.231 +607.232 +607.233 +607.234 +607.235 +607.236 +607.237 +608.225 +608.226 +608.227 +608.228 +608.229 +608.230 +608.231 +608.232 +608.233 +608.234 +608.235 +608.236 +608.237 +609.225 +609.226 +609.227 +609.228 +609.229 +609.230 +609.231 +609.232 +609.233 +609.234 +609.235 +609.236 +609.237 +610.224 +610.225 +610.226 +610.227 +610.228 +610.229 +610.230 +610.231 +610.232 +610.233 +610.234 +610.235 +610.236 +610.237 +611.224 +611.225 +611.226 +611.227 +611.228 +611.229 +611.230 +611.231 +611.232 +611.233 +611.234 +611.235 +611.236 +611.237 +612.223 +612.224 +612.225 +612.226 +612.227 +612.228 +612.229 +612.230 +612.231 +612.232 +612.233 +612.234 +612.235 +612.236 +612.237 +613.223 +613.224 +613.225 +613.226 +613.227 +613.228 +613.229 +613.230 +613.231 +613.232 +613.233 +613.234 +613.235 +613.236 +613.237 +614.222 +614.223 +614.224 +614.225 +614.226 +614.227 +614.228 +614.229 +614.230 +614.231 +614.232 +614.233 +614.234 +614.235 +614.236 +614.237 +615.222 +615.223 +615.224 +615.225 +615.226 +615.227 +615.228 +615.229 +615.230 +615.231 +615.232 +615.233 +615.234 +615.235 +615.236 +615.237 +616.221 +616.222 +616.223 +616.224 +616.225 +616.226 +616.227 +616.228 +616.229 +616.230 +616.231 +616.232 +616.233 +616.234 +616.235 +616.236 +616.237 +617.221 +617.222 +617.223 +617.224 +617.225 +617.226 +617.227 +617.228 +617.229 +617.230 +617.231 +617.232 +617.233 +617.234 +617.235 +617.236 +617.237 +618.220 +618.221 +618.222 +618.223 +618.224 +618.225 +618.226 +618.227 +618.228 +618.229 +618.230 +618.231 +618.232 +618.233 +618.234 +618.235 +618.236 +618.237 +619.220 +619.221 +619.222 +619.223 +619.224 +619.225 +619.226 +619.227 +619.228 +619.229 +619.230 +619.231 +619.232 +619.233 +619.234 +619.235 +619.236 +619.237 +620.219 +620.220 +620.221 +620.222 +620.223 +620.224 +620.225 +620.226 +620.227 +620.228 +620.229 +620.230 +620.231 +620.232 +620.233 +620.234 +620.235 +620.236 +620.237 +621.219 +621.220 +621.221 +621.222 +621.223 +621.224 +621.225 +621.226 +621.227 +621.228 +621.229 +621.230 +621.231 +621.232 +621.233 +621.234 +621.235 +621.236 +621.237 +622.218 +622.219 +622.220 +622.221 +622.222 +622.223 +622.224 +622.225 +622.226 +622.227 +622.228 +622.229 +622.230 +622.231 +622.232 +622.233 +622.234 +622.235 +622.236 +622.237 +623.218 +623.219 +623.220 +623.221 +623.222 +623.223 +623.224 +623.225 +623.226 +623.227 +623.228 +623.229 +623.230 +623.231 +623.232 +623.233 +623.234 +623.235 +623.236 +623.237 +624.217 +624.218 +624.219 +624.220 +624.221 +624.222 +624.223 +624.224 +624.225 +624.226 +624.227 +624.228 +624.229 +624.230 +624.231 +624.232 +624.233 +624.234 +624.235 +624.236 +624.237 +625.217 +625.218 +625.219 +625.220 +625.221 +625.222 +625.223 +625.224 +625.225 +625.226 +625.227 +625.228 +625.229 +625.230 +625.231 +625.232 +625.233 +625.234 +625.235 +625.236 +625.237 +626.217 +626.218 +626.219 +626.220 +626.221 +626.222 +626.223 +626.224 +626.225 +626.226 +626.227 +626.228 +626.229 +626.230 +626.231 +626.232 +626.233 +626.234 +626.235 +626.236 +626.237 +627.217 +627.218 +627.219 +627.220 +627.221 +627.222 +627.223 +627.224 +627.225 +627.226 +627.227 +627.228 +627.229 +627.230 +627.231 +627.232 +627.233 +627.234 +627.235 +627.236 +627.237 +628.217 +628.218 +628.219 +628.220 +628.221 +628.222 +628.223 +628.224 +628.225 +628.226 +628.227 +628.228 +628.229 +628.230 +628.231 +628.232 +628.233 +628.234 +628.235 +628.236 +628.237 +628.239 +629.217 +629.218 +629.219 +629.220 +629.221 +629.222 +629.223 +629.224 +629.225 +629.226 +629.227 +629.228 +629.229 +629.230 +629.231 +629.232 +629.233 +629.234 +629.235 +629.236 +629.237 +630.217 +630.218 +630.219 +630.220 +630.221 +630.222 +630.223 +630.224 +630.225 +630.226 +630.227 +630.228 +630.229 +630.230 +630.231 +630.232 +630.233 +630.234 +630.235 +630.236 +630.237 +631.217 +631.218 +631.219 +631.220 +631.221 +631.222 +631.223 +631.224 +631.225 +631.226 +631.227 +631.228 +631.229 +631.230 +631.231 +631.232 +631.233 +631.234 +631.235 +631.236 +631.237 +631.238 +632.217 +632.218 +632.219 +632.220 +632.221 +632.222 +632.223 +632.224 +632.225 +632.226 +632.227 +632.228 +632.229 +632.230 +632.231 +632.232 +632.233 +632.234 +632.235 +632.236 +632.237 +633.217 +633.218 +633.219 +633.220 +633.221 +633.222 +633.223 +633.224 +633.225 +633.226 +633.227 +633.228 +633.229 +633.230 +633.231 +633.232 +633.233 +633.234 +633.235 +633.236 +633.237 +634.217 +634.218 +634.219 +634.220 +634.221 +634.222 +634.223 +634.224 +634.225 +634.226 +634.227 +634.228 +634.229 +634.230 +634.231 +634.232 +634.233 +634.234 +634.235 +634.236 +634.237 +635.217 +635.218 +635.219 +635.220 +635.221 +635.222 +635.223 +635.224 +635.225 +635.226 +635.227 +635.228 +635.229 +635.230 +635.231 +635.232 +635.233 +635.234 +635.235 +635.236 +636.217 +636.219 +636.220 +636.221 +636.222 +636.223 +636.224 +636.225 +636.226 +636.227 +636.228 +636.229 +636.230 +636.231 +636.232 +636.233 +636.234 +636.235 +636.236 +637.217 +637.219 +637.220 +637.221 +637.222 +637.223 +637.224 +637.225 +637.226 +637.227 +637.228 +637.229 +637.230 +637.231 +637.232 +637.233 +637.234 +637.235 +637.236 +638.219 +638.221 +638.222 +638.223 +638.224 +638.225 +638.226 +638.227 +638.228 +638.229 +638.230 +638.231 +638.232 +638.233 +638.234 +638.235 +639.219 +639.221 +639.222 +639.223 +639.224 +639.225 +639.226 +639.227 +639.228 +639.229 +639.230 +639.231 +639.232 +639.233 +639.234 +639.235 +640.221 +640.222 +640.223 +640.224 +640.225 +640.226 +640.227 +640.228 +640.229 +640.230 +640.231 +640.232 +640.233 +640.234 +640.235 +641.221 +641.222 +641.223 +641.224 +641.225 +641.226 +641.227 +641.228 +641.229 +641.230 +641.231 +641.232 +641.233 +641.234 +642.221 +642.222 +642.223 +642.224 +642.225 +642.226 +642.227 +642.228 +642.229 +642.230 +642.231 +642.232 +642.233 +642.234 +643.221 +643.222 +643.223 +643.224 +643.225 +643.226 +643.227 +643.228 +643.229 +643.230 +643.231 +643.232 +643.233 +643.234 +644.221 +644.222 +644.223 +644.224 +644.225 +644.226 +644.227 +644.228 +644.229 +644.230 +644.231 +644.232 +644.233 +645.221 +645.222 +645.223 +645.224 +645.225 +645.226 +645.227 +645.228 +645.229 +645.230 +645.231 +645.232 +645.233 +646.221 +646.223 +646.224 +646.225 +646.226 +646.227 +646.228 +646.229 +646.230 +646.231 +646.232 +646.233 +647.223 +647.224 +647.225 +647.226 +647.227 +647.228 +647.229 +647.230 +647.231 +647.232 +648.223 +648.225 +648.226 +648.227 +648.228 +648.229 +648.230 +648.231 +648.232 +649.225 +649.226 +649.227 +649.228 +649.229 +649.230 +649.231 +649.232 +650.225 +650.226 +650.227 +650.228 +650.229 +650.230 +650.231 +651.225 +651.226 +651.227 +651.228 +651.229 +651.230 +651.231 +652.195 +652.197 +652.225 +652.226 +652.227 +652.228 +652.229 +652.230 +653.194 +653.195 +653.196 +653.197 +653.225 +653.226 +653.227 +653.228 +653.229 +653.230 +654.192 +654.193 +654.194 +654.195 +654.196 +654.197 +654.225 +654.226 +654.227 +654.228 +654.229 +654.230 +655.191 +655.192 +655.193 +655.194 +655.195 +655.196 +655.225 +655.228 +655.229 +656.188 +656.189 +656.190 +656.191 +656.192 +656.193 +656.194 +656.195 +656.228 +656.229 +657.185 +657.186 +657.187 +657.188 +657.189 +657.190 +657.191 +657.192 +657.193 +657.194 +657.195 +657.227 +657.228 +657.229 +658.181 +658.182 +658.183 +658.184 +658.185 +658.186 +658.187 +658.188 +658.189 +658.190 +658.191 +658.192 +658.193 +658.194 +658.195 +658.227 +658.228 +659.181 +659.182 +659.183 +659.184 +659.185 +659.186 +659.187 +659.188 +659.189 +659.190 +659.191 +659.192 +659.193 +659.194 +659.195 +659.227 +659.228 +660.181 +660.182 +660.183 +660.184 +660.185 +660.186 +660.187 +660.188 +660.189 +660.190 +660.191 +660.192 +660.193 +660.194 +660.195 +660.227 +661.182 +661.183 +661.184 +661.185 +661.186 +661.187 +661.188 +661.189 +661.190 +661.191 +661.192 +661.193 +661.194 +661.227 +662.182 +662.183 +662.184 +662.185 +662.186 +662.187 +662.188 +662.189 +662.190 +662.191 +662.193 +663.182 +663.183 +663.184 +663.185 +663.186 +663.187 +663.188 +663.189 +663.190 +663.191 +664.183 +664.184 +664.185 +664.186 +664.187 +664.188 +664.189 +665.185 +665.186 +665.187 diff --git a/auxdir/CFIS/tiles_202510/tiles_P9.txt b/auxdir/CFIS/tiles_202510/tiles_P9.txt new file mode 100644 index 00000000..22a14113 --- /dev/null +++ b/auxdir/CFIS/tiles_202510/tiles_P9.txt @@ -0,0 +1,2257 @@ +168.294 +176.296 +270.242 +169.290 +131.313 +121.303 +185.296 +325.255 +144.299 +167.300 +229.281 +303.267 +171.304 +146.296 +218.285 +136.301 +220.285 +166.289 +153.292 +114.305 +125.303 +170.294 +197.294 +124.317 +199.299 +122.320 +156.290 +154.304 +313.262 +332.252 +327.255 +127.318 +165.305 +128.315 +273.241 +122.316 +120.319 +190.301 +329.256 +171.292 +182.283 +190.294 +059.334 +144.311 +186.283 +310.265 +196.295 +147.296 +180.285 +326.255 +230.278 +166.295 +129.306 +168.302 +324.255 +114.321 +097.324 +180.301 +144.300 +120.302 +138.313 +178.295 +199.291 +117.303 +117.319 +348.238 +158.301 +330.257 +161.294 +159.305 +174.289 +255.252 +181.299 +221.280 +205.289 +335.254 +121.318 +183.300 +127.300 +184.298 +243.260 +182.297 +173.305 +261.249 +168.288 +113.320 +314.265 +215.287 +162.302 +175.301 +106.324 +231.278 +165.293 +170.306 +193.296 +327.258 +215.283 +224.279 +156.304 +157.304 +223.280 +320.256 +226.281 +118.317 +149.294 +156.293 +170.297 +205.291 +168.293 +222.284 +194.300 +134.303 +167.296 +123.317 +150.305 +168.291 +125.307 +184.296 +154.307 +150.293 +134.312 +154.290 +178.287 +336.252 +200.293 +198.300 +311.264 +099.323 +145.309 +140.301 +173.294 +163.306 +125.302 +212.285 +114.311 +161.303 +169.301 +164.300 +173.297 +320.260 +189.297 +353.238 +188.297 +172.294 +198.292 +151.297 +211.289 +148.296 +142.297 +188.281 +104.324 +328.254 +199.292 +119.305 +228.279 +149.305 +061.333 +125.316 +189.303 +160.306 +126.315 +164.289 +202.289 +137.303 +201.289 +155.290 +187.303 +185.285 +136.313 +120.306 +095.323 +123.303 +170.303 +318.260 +131.305 +164.292 +139.300 +179.296 +192.294 +202.290 +169.294 +184.301 +178.303 +122.302 +160.290 +321.256 +187.295 +322.258 +177.301 +309.264 +321.259 +139.313 +180.303 +161.290 +314.256 +193.299 +188.294 +128.306 +165.290 +189.296 +129.313 +337.252 +135.313 +122.303 +121.319 +214.284 +189.280 +173.304 +185.304 +123.302 +206.288 +128.317 +130.316 +166.296 +130.314 +176.300 +098.325 +195.296 +324.254 +169.297 +148.297 +192.299 +177.296 +273.238 +166.303 +117.320 +271.242 +097.325 +172.291 +112.321 +158.293 +158.294 +189.304 +359.238 +171.293 +213.288 +183.286 +135.304 +172.289 +222.283 +098.324 +309.267 +202.293 +226.279 +256.252 +116.305 +185.284 +142.301 +142.310 +322.262 +318.256 +191.296 +149.308 +187.300 +317.256 +153.305 +143.296 +185.297 +354.238 +327.256 +120.305 +179.299 +180.286 +176.289 +144.308 +152.293 +319.260 +128.314 +191.303 +170.293 +229.280 +269.244 +217.282 +125.308 +155.293 +155.307 +323.255 +186.291 +140.309 +187.280 +206.289 +173.301 +250.256 +214.287 +210.288 +146.310 +151.294 +198.299 +310.267 +177.300 +225.280 +157.295 +097.326 +142.298 +127.301 +195.299 +164.302 +183.295 +203.291 +130.301 +125.317 +188.295 +329.253 +184.285 +165.302 +263.248 +175.304 +126.302 +159.306 +127.307 +302.267 +218.286 +167.292 +156.295 +194.302 +312.265 +216.286 +179.286 +095.324 +169.293 +141.302 +228.280 +174.298 +249.256 +174.305 +152.308 +336.251 +173.286 +145.295 +146.308 +124.318 +190.281 +217.283 +167.293 +158.303 +138.300 +150.294 +151.308 +175.298 +169.302 +156.305 +320.261 +103.324 +110.324 +152.304 +147.295 +161.304 +127.317 +215.284 +190.302 +184.297 +109.324 +170.305 +178.297 +321.261 +170.296 +112.320 +192.296 +320.259 +275.239 +108.324 +149.295 +226.280 +160.291 +192.280 +124.304 +332.251 +162.294 +315.263 +181.296 +205.290 +159.293 +174.286 +163.300 +328.256 +184.303 +176.286 +179.300 +182.304 +338.252 +161.296 +123.308 +160.304 +171.299 +122.318 +162.300 +215.285 +334.254 +137.300 +118.304 +158.304 +201.290 +159.291 +156.302 +146.298 +165.291 +138.303 +186.296 +086.331 +194.299 +264.247 +187.304 +134.315 +129.301 +121.301 +155.289 +167.298 +167.303 +194.292 +169.292 +136.303 +174.300 +168.292 +137.304 +102.324 +135.312 +325.257 +177.297 +314.263 +170.299 +166.304 +152.307 +136.311 +132.304 +225.282 +175.295 +271.243 +101.327 +277.239 +220.283 +331.253 +213.287 +188.280 +188.299 +193.298 +229.278 +184.281 +184.291 +173.291 +257.251 +118.318 +189.299 +323.258 +198.291 +327.257 +200.299 +251.255 +176.298 +182.281 +310.263 +126.300 +310.266 +161.301 +326.253 +172.288 +180.283 +131.315 +315.260 +163.304 +217.286 +155.296 +322.256 +272.241 +312.264 +170.290 +189.301 +174.292 +143.298 +204.291 +240.262 +093.326 +155.303 +141.301 +265.245 +138.311 +186.304 +179.298 +276.238 +152.295 +219.282 +264.246 +168.304 +160.292 +146.299 +190.280 +187.301 +172.301 +147.308 +124.319 +318.262 +122.300 +180.299 +153.308 +162.305 +170.301 +210.285 +198.298 +179.285 +102.326 +217.284 +333.253 +194.296 +143.311 +335.253 +100.324 +135.303 +157.296 +173.289 +313.263 +202.292 +142.299 +123.301 +175.285 +182.295 +137.311 +105.325 +130.300 +175.303 +161.292 +173.299 +320.258 +172.296 +216.283 +149.296 +156.296 +154.296 +126.303 +117.306 +097.323 +100.326 +101.326 +166.290 +171.290 +200.291 +150.307 +103.323 +131.316 +124.307 +324.258 +155.306 +195.293 +177.303 +338.251 +195.300 +207.289 +059.333 +308.266 +157.289 +147.298 +146.309 +178.289 +310.264 +116.319 +151.307 +258.251 +159.295 +223.284 +232.280 +190.296 +221.283 +349.238 +325.256 +183.281 +156.306 +167.304 +178.296 +198.294 +188.296 +162.292 +173.296 +200.294 +212.287 +225.281 +331.256 +148.298 +189.281 +157.292 +196.301 +183.297 +176.302 +124.316 +195.294 +159.289 +177.298 +317.259 +184.280 +336.253 +322.259 +096.325 +192.297 +128.316 +147.294 +180.297 +178.302 +224.281 +182.298 +145.296 +303.266 +212.286 +184.295 +172.287 +104.325 +191.298 +227.280 +333.251 +173.288 +176.297 +185.302 +159.301 +308.256 +162.291 +222.280 +160.295 +102.323 +136.302 +149.297 +221.282 +122.305 +114.304 +323.257 +138.312 +155.305 +152.306 +123.319 +170.295 +058.334 +199.290 +139.311 +329.255 +176.295 +149.298 +172.302 +117.318 +157.293 +147.299 +154.303 +221.281 +165.304 +260.250 +113.305 +190.298 +143.310 +134.302 +234.279 +219.284 +210.287 +173.293 +152.291 +126.306 +193.292 +139.303 +121.317 +129.315 +333.254 +196.298 +175.302 +178.284 +154.293 +129.317 +266.245 +264.248 +197.295 +274.238 +151.293 +205.288 +160.289 +325.254 +195.298 +133.304 +168.301 +180.300 +144.296 +186.284 +131.300 +124.301 +208.289 +120.303 +158.296 +161.293 +101.324 +223.281 +118.319 +190.291 +163.290 +165.295 +181.284 +224.282 +198.290 +150.292 +191.293 +178.299 +196.292 +143.309 +314.260 +120.320 +167.305 +190.295 +331.252 +309.265 +158.305 +335.251 +115.320 +162.303 +322.260 +316.265 +309.256 +115.319 +147.297 +320.262 +265.247 +192.291 +163.302 +170.298 +268.244 +319.262 +199.293 +191.295 +162.296 +315.262 +167.295 +176.285 +330.251 +226.282 +181.298 +119.304 +132.314 +166.291 +184.300 +160.305 +150.306 +326.256 +209.287 +143.308 +182.284 +140.302 +189.298 +187.296 +227.281 +179.284 +188.302 +187.282 +210.286 +193.293 +114.319 +330.252 +273.239 +123.300 +321.257 +122.301 +318.261 +188.282 +125.301 +150.296 +154.306 +127.303 +313.266 +171.306 +158.295 +125.315 +163.301 +166.301 +123.316 +176.292 +167.290 +158.290 +157.305 +192.301 +274.239 +318.258 +197.298 +157.301 +137.302 +189.302 +145.308 +120.318 +219.281 +169.295 +168.299 +311.263 +204.292 +136.314 +130.315 +304.266 +148.294 +164.306 +208.287 +169.298 +129.314 +174.302 +180.298 +175.297 +153.295 +179.304 +107.324 +174.295 +058.333 +141.299 +177.295 +218.282 +158.292 +166.302 +172.299 +157.291 +195.295 +156.289 +135.314 +180.302 +176.301 +183.299 +333.252 +317.261 +318.264 +321.262 +214.285 +147.293 +172.290 +209.290 +178.283 +183.283 +308.265 +185.301 +169.289 +146.307 +331.251 +186.298 +266.246 +118.320 +337.251 +143.301 +169.305 +194.294 +213.285 +254.253 +167.291 +162.290 +160.293 +232.279 +328.258 +305.267 +350.238 +228.281 +204.288 +160.302 +176.288 +170.292 +332.255 +179.302 +091.327 +211.285 +263.247 +149.309 +201.298 +324.260 +269.243 +191.302 +181.300 +124.300 +094.325 +174.290 +323.256 +172.303 +191.301 +201.292 +181.285 +163.296 +339.251 +212.288 +202.298 +193.301 +184.282 +116.304 +187.291 +190.297 +098.323 +145.310 +157.294 +194.298 +139.312 +169.300 +311.267 +131.301 +141.311 +153.306 +117.304 +322.261 +143.300 +207.290 +191.297 +271.241 +145.299 +312.266 +096.326 +128.301 +173.302 +171.288 +140.311 +306.266 +163.303 +111.321 +203.292 +253.254 +320.263 +220.281 +175.292 +333.255 +158.291 +319.261 +156.294 +164.295 +166.305 +168.298 +207.287 +126.301 +308.264 +179.287 +171.300 +166.292 +118.306 +161.302 +151.295 +188.303 +189.291 +153.296 +326.259 +159.290 +327.254 +224.283 +165.289 +196.291 +187.281 +167.302 +148.293 +157.290 +165.301 +316.264 +331.254 +175.287 +115.304 +329.252 +149.293 +262.248 +178.298 +170.289 +171.296 +216.287 +186.302 +148.307 +163.291 +152.305 +351.238 +164.303 +121.306 +192.300 +330.253 +275.238 +151.292 +192.281 +166.299 +119.320 +174.299 +227.282 +160.296 +168.306 +133.313 +159.294 +334.251 +162.295 +160.303 +060.333 +183.304 +179.283 +134.313 +140.312 +315.264 +138.301 +127.314 +158.306 +314.261 +183.296 +213.284 +164.299 +127.306 +103.325 +137.314 +116.303 +313.265 +268.245 +126.318 +267.245 +190.303 +115.305 +173.290 +165.306 +140.310 +159.292 +154.305 +177.304 +171.298 +153.293 +182.282 +188.291 +211.288 +201.291 +329.257 +186.295 +171.301 +313.256 +171.289 +188.300 +144.298 +167.301 +326.254 +151.306 +134.314 +332.254 +114.320 +186.282 +168.297 +305.266 +209.286 +150.309 +270.243 +216.284 +163.292 +211.286 +161.295 +154.289 +159.302 +133.302 +154.294 +156.291 +121.304 +181.286 +319.256 +172.304 +175.300 +197.293 +150.295 +199.298 +325.258 +123.305 +170.288 +146.297 +122.319 +117.317 +317.260 +218.283 +185.298 +180.295 +231.279 +176.304 +155.294 +316.263 +312.256 +169.306 +102.325 +318.263 +133.312 +147.307 +113.321 +186.299 +327.253 +153.304 +175.286 +315.261 +194.291 +162.301 +196.294 +132.316 +252.254 +136.304 +222.282 +167.297 +161.300 +164.294 +219.285 +182.302 +313.264 +177.289 +171.294 +177.284 +185.281 +242.261 +174.301 +176.299 +314.262 +334.252 +188.304 +191.281 +183.301 +148.295 +124.308 +206.290 +164.305 +144.310 +255.253 +138.310 +136.312 +220.284 +105.324 +200.292 +154.291 +277.238 +178.286 +133.303 +141.310 +144.309 +140.300 +311.265 +307.267 +185.300 +187.298 +189.294 +173.298 +272.242 +194.295 +316.259 +141.309 +193.302 +267.244 +193.295 +173.295 +128.302 +188.298 +148.306 +330.254 +157.303 +152.294 +145.298 +094.326 +124.303 +177.292 +208.288 +170.291 +217.285 +219.283 +117.305 +168.290 +186.303 +134.304 +126.307 +204.290 +155.304 +099.324 +168.303 +276.239 +167.289 +139.301 +195.292 +119.318 +172.300 +174.293 +162.306 +170.302 +192.293 +181.295 +159.296 +140.299 +355.238 +129.302 +322.257 +171.297 +176.290 +221.284 +262.249 +096.323 +164.291 +183.282 +178.304 +183.298 +197.291 +316.260 +177.288 +162.293 +191.291 +163.289 +181.303 +185.280 +172.295 +224.280 +175.293 +352.238 +328.255 +119.306 +161.291 +191.280 +323.259 +179.295 +162.289 +184.302 +324.259 +118.305 +326.258 +180.304 +230.279 +182.286 +182.299 +098.326 +121.320 +122.304 +186.281 +092.327 +197.300 +182.301 +103.326 +222.281 +160.294 +164.293 +166.298 +334.253 +154.295 +192.295 +172.292 +119.302 +095.325 +159.303 +206.291 +192.298 +306.267 +155.292 +123.318 +120.304 +117.321 +142.312 +126.317 +191.299 +128.299 +148.309 +324.257 +096.324 +116.306 +321.258 +190.299 +153.290 +323.260 +176.303 +185.283 +178.301 +275.240 +307.265 +169.288 +133.314 +168.300 +196.299 +173.287 +145.297 +210.289 +151.305 +104.326 +251.254 +144.297 +273.240 +171.302 +130.313 +175.289 +156.292 +172.293 +101.323 +111.306 +340.251 +272.240 +165.294 +223.282 +329.254 +169.303 +128.300 +279.238 +183.285 +123.304 +180.296 +143.297 +316.262 +113.319 +165.303 +185.299 +113.306 +142.309 +206.287 +149.307 +253.253 +154.292 +129.316 +203.290 +178.285 +110.321 +115.306 +196.293 +193.291 +141.300 +163.293 +119.303 +124.302 +191.300 +125.318 +330.255 +133.315 +192.302 +180.282 +184.299 +209.289 +175.290 +164.301 +328.252 +199.294 +311.266 +176.284 +099.325 +203.288 +182.300 +174.297 +166.293 +181.297 +125.300 +356.238 +132.315 +139.302 +259.250 +129.305 +178.300 +187.297 +307.266 +145.300 +189.300 +191.294 +183.302 +173.300 +317.264 +164.290 +309.266 +109.321 +139.310 +146.294 +184.284 +188.283 +177.285 +161.289 +166.300 +150.297 +186.280 +180.287 +312.263 +170.304 +157.302 +127.302 +132.300 +181.282 +197.299 +157.306 +197.292 +169.296 +133.300 +230.280 +167.294 +187.283 +172.297 +358.238 +168.296 +182.285 +233.279 +195.301 +174.287 +174.304 +120.317 +171.305 +130.305 +161.305 +107.325 +145.307 +208.290 +326.257 +125.304 +190.282 +171.287 +127.316 +185.303 +189.295 +175.299 +193.294 +147.310 +360.238 +321.260 +116.320 +190.300 +112.306 +215.286 +174.288 +137.301 +316.261 +175.296 +129.300 +357.238 +122.317 +130.304 +183.284 +317.262 +161.306 +187.299 +319.259 +186.297 +310.256 +175.288 +194.293 +138.302 +169.299 +124.315 +185.295 +314.264 +106.325 +176.287 +328.257 +254.252 +146.295 +252.255 +186.300 +167.299 +160.301 +184.304 +274.240 +213.286 +182.303 +177.287 +181.302 +172.298 +158.302 +168.289 +174.303 +201.293 +118.303 +094.324 +318.259 +174.296 +179.303 +193.297 +193.300 +119.317 +158.289 +225.283 +216.285 +311.256 +173.292 +184.283 +183.303 +229.279 +332.253 +231.280 +214.286 +177.286 +141.312 +200.298 +118.321 +203.298 +165.292 +163.305 +135.311 +173.303 +180.284 +250.255 +301.267 +131.314 +166.294 +361.238 +153.294 +208.286 +169.291 +168.295 +204.289 +195.291 +181.301 +194.301 +132.303 +141.298 +319.263 +119.319 +332.256 +179.301 +163.295 +121.302 +179.288 +330.256 +159.304 +319.258 +201.299 +127.315 +147.309 +202.291 +165.296 +223.279 +185.282 +122.306 +169.304 +152.292 +187.302 +174.291 +153.307 +115.318 +135.302 +170.300 +196.300 +304.267 +100.325 +171.295 +100.323 +335.252 +325.259 +322.255 +198.293 +182.296 +164.296 +331.255 +156.303 +181.283 +220.282 +306.265 +149.306 +126.316 +232.278 +320.257 +225.279 +265.246 +162.304 +155.295 +193.280 +143.299 +115.321 +278.238 +308.267 +093.327 +132.313 +312.262 +151.296 +179.297 +207.288 +155.291 +142.311 +185.291 +178.288 +200.290 +116.318 +317.263 +316.256 +315.265 +203.289 +153.291 +137.313 +189.282 +121.305 +165.299 +328.253 +165.300 +177.302 +116.321 +248.257 +177.299 +131.304 +164.304 +183.280 +128.305 +172.305 +111.324 +101.325 +218.284 +211.287 +175.291 +163.294 +095.326 +171.303 +227.279 +209.288 +152.296 +188.301 +114.306 +168.305 +223.283 +142.300 +171.291 +150.308 +324.256 +148.308 +315.256 +099.326 +186.301 +024.348 +025.348 +025.349 +026.347 +026.348 +026.350 +027.346 +027.347 +027.348 +027.351 +028.347 +028.351 +029.345 +029.347 +029.350 +029.351 +030.350 +030.351 +031.344 +031.348 +031.350 +031.351 +032.342 +032.343 +032.349 +032.350 +032.351 +033.342 +033.343 +033.349 +033.350 +033.351 +034.341 +034.342 +034.347 +034.349 +034.350 +034.351 +035.340 +035.341 +035.342 +035.348 +035.349 +035.350 +036.339 +036.340 +036.341 +036.342 +036.348 +036.349 +036.350 +037.339 +037.340 +037.341 +037.342 +037.348 +037.349 +037.350 +038.338 +038.339 +038.340 +038.341 +038.342 +038.347 +038.348 +038.349 +038.350 +039.338 +039.339 +039.340 +039.341 +039.342 +039.347 +039.348 +039.349 +039.350 +040.337 +040.338 +040.339 +040.340 +040.341 +040.342 +040.347 +040.348 +040.349 +040.350 +041.337 +041.338 +041.339 +041.340 +041.341 +041.342 +041.346 +041.347 +041.348 +041.349 +041.350 +042.336 +042.337 +042.338 +042.339 +042.340 +042.341 +042.346 +042.347 +042.348 +042.349 +043.336 +043.337 +043.338 +043.339 +043.340 +043.341 +043.346 +043.347 +043.348 +043.349 +044.335 +044.336 +044.337 +044.338 +044.339 +044.340 +044.341 +044.345 +044.346 +044.347 +044.348 +044.349 +045.334 +045.335 +045.336 +045.337 +045.338 +045.339 +045.340 +045.341 +045.345 +045.346 +045.347 +045.348 +045.349 +046.334 +046.335 +046.336 +046.337 +046.338 +046.339 +046.340 +046.341 +046.345 +046.346 +046.347 +046.348 +047.334 +047.335 +047.336 +047.337 +047.338 +047.339 +047.340 +047.344 +047.345 +047.346 +047.347 +047.348 +048.333 +048.334 +048.335 +048.336 +048.337 +048.338 +048.339 +048.344 +048.345 +048.346 +048.347 +048.348 +049.333 +049.334 +049.335 +049.336 +049.337 +049.338 +049.339 +049.343 +049.344 +049.345 +049.346 +049.347 +049.348 +050.332 +050.333 +050.334 +050.335 +050.336 +050.337 +050.338 +050.343 +050.344 +050.345 +050.346 +050.347 +050.348 +051.332 +051.333 +051.334 +051.335 +051.336 +051.337 +051.338 +051.342 +051.343 +051.344 +051.345 +051.346 +051.347 +051.348 +052.331 +052.333 +052.334 +052.335 +052.336 +052.337 +052.341 +052.342 +052.343 +052.344 +052.345 +052.346 +052.347 +052.348 +053.333 +053.334 +053.335 +053.336 +053.337 +053.341 +053.342 +053.343 +053.344 +053.345 +053.346 +053.347 +053.348 +054.330 +054.333 +054.334 +054.335 +054.336 +054.341 +054.342 +054.343 +054.344 +054.345 +054.346 +054.347 +055.333 +055.334 +055.335 +055.336 +055.340 +055.341 +055.342 +055.343 +055.344 +055.345 +055.346 +055.347 +056.329 +056.333 +056.334 +056.335 +056.340 +056.341 +056.342 +056.343 +056.344 +056.345 +056.346 +056.347 +057.333 +057.334 +057.335 +057.339 +057.340 +057.341 +057.342 +057.343 +057.344 +057.346 +057.347 +058.328 +058.335 +058.339 +058.340 +058.341 +058.342 +058.343 +058.344 +058.346 +059.339 +059.340 +059.341 +059.342 +059.344 +059.346 +060.339 +060.340 +060.341 +060.342 +060.345 +060.346 +061.339 +061.340 +061.341 +061.342 +061.345 +061.346 +062.325 +062.338 +062.339 +062.340 +062.341 +062.342 +062.345 +063.338 +063.339 +063.340 +063.341 +063.345 +064.338 +064.339 +064.340 +064.341 +064.344 +064.345 +065.323 +065.338 +065.339 +065.340 +065.344 +065.345 +066.322 +066.338 +066.339 +066.340 +066.344 +067.338 +067.339 +067.340 +067.344 +068.338 +068.339 +068.344 +069.338 +069.339 +069.344 +070.338 +070.339 +070.344 +071.338 +071.339 +071.344 +072.338 +072.344 +073.338 +073.343 +073.344 +074.338 +074.343 +074.344 +075.343 +075.344 +076.343 +076.344 +077.343 +077.344 +078.342 +078.343 +079.342 +080.342 +081.340 +081.342 +082.332 +082.340 +082.341 +082.342 +082.343 +083.332 +083.340 +083.341 +084.340 +084.341 +085.339 +085.340 +085.341 +086.339 +086.340 +086.341 +087.340 +088.338 +088.340 +089.332 +089.338 +089.340 +090.338 +090.340 +091.340 +092.339 +093.339 +094.339 +095.339 +096.339 +097.338 +097.339 +104.323 +105.323 +106.316 +106.322 +106.323 +107.315 +107.316 +107.322 +107.323 +108.315 +108.316 +108.322 +108.323 +109.314 +109.315 +109.316 +109.322 +109.323 +110.313 +110.314 +110.315 +110.316 +110.322 +110.323 +111.313 +111.314 +111.315 +111.316 +111.322 +111.323 +111.337 +112.312 +112.313 +112.314 +112.315 +112.316 +112.322 +112.323 +113.312 +113.313 +113.314 +113.315 +113.316 +113.322 +114.312 +114.313 +114.314 +114.315 +114.316 +114.322 +115.311 +115.312 +115.313 +115.314 +115.315 +115.316 +115.322 +116.311 +116.312 +116.313 +116.314 +116.315 +116.336 +117.310 +117.311 +117.312 +117.313 +117.314 +117.315 +117.336 +118.310 +118.311 +118.312 +118.313 +118.314 +119.309 +119.310 +119.311 +119.312 +119.313 +120.309 +120.310 +120.311 +120.312 +120.313 +121.308 +121.309 +121.310 +121.311 +121.312 +122.307 +122.308 +122.309 +122.310 +122.311 +122.312 +122.335 +123.306 +123.307 +123.309 +123.310 +123.311 +124.305 +124.306 +124.309 +124.310 +124.311 +125.305 +125.306 +125.309 +125.310 +126.304 +126.305 +126.308 +126.309 +126.310 +127.304 +127.305 +127.308 +127.309 +128.303 +128.304 +128.307 +128.308 +128.309 +129.303 +129.304 +129.307 +129.308 +130.302 +130.303 +130.306 +130.307 +130.308 +131.302 +131.303 +131.306 +131.307 +132.301 +132.302 +132.305 +132.306 +132.307 +133.301 +133.305 +133.306 +134.300 +134.301 +134.305 +134.306 +135.300 +135.301 +135.305 +136.300 +136.305 +137.312 +138.299 +139.299 +140.298 +166.306 +167.306 +181.304 +187.293 +225.278 +226.278 +227.278 +228.277 +228.278 +229.277 +230.276 +230.277 +231.276 +231.277 +232.275 +232.276 +232.277 +233.274 +233.275 +233.276 +233.277 +233.278 +234.274 +234.275 +234.276 +234.277 +234.278 +235.273 +235.274 +235.275 +235.276 +235.277 +235.278 +236.273 +236.274 +236.275 +236.276 +236.277 +237.272 +237.273 +237.274 +237.275 +237.276 +237.277 +238.272 +238.273 +238.274 +238.275 +238.276 +239.271 +239.272 +239.273 +239.274 +239.275 +239.276 +240.271 +240.272 +240.273 +240.274 +240.275 +241.271 +241.272 +241.273 +241.274 +241.275 +242.270 +242.271 +242.272 +242.273 +242.274 +242.275 +243.270 +243.271 +243.272 +243.273 +243.274 +244.270 +244.271 +244.272 +244.273 +245.270 +245.271 +245.272 +245.273 +246.270 +246.271 +246.272 +247.238 +247.270 +247.271 +247.272 +248.238 +248.270 +248.271 +249.270 +249.271 +250.270 +251.270 +280.260 +423.258 +662.192 diff --git a/auxdir/CFIS/tiles_202510/tiles_P9_not_complete.txt b/auxdir/CFIS/tiles_202510/tiles_P9_not_complete.txt new file mode 100644 index 00000000..70aad219 --- /dev/null +++ b/auxdir/CFIS/tiles_202510/tiles_P9_not_complete.txt @@ -0,0 +1,1581 @@ +168.294 +176.296 +270.242 +169.290 +131.313 +121.303 +185.296 +325.255 +144.299 +167.300 +229.281 +303.267 +171.304 +146.296 +218.285 +136.301 +220.285 +166.289 +153.292 +114.305 +125.303 +170.294 +197.294 +124.317 +199.299 +122.320 +156.290 +154.304 +313.262 +332.252 +327.255 +127.318 +165.305 +128.315 +273.241 +122.316 +120.319 +190.301 +329.256 +171.292 +182.283 +190.294 +059.334 +144.311 +186.283 +310.265 +196.295 +147.296 +180.285 +326.255 +230.278 +166.295 +129.306 +168.302 +324.255 +114.321 +097.324 +180.301 +144.300 +120.302 +138.313 +178.295 +199.291 +117.303 +117.319 +348.238 +158.301 +330.257 +161.294 +159.305 +174.289 +255.252 +181.299 +221.280 +205.289 +335.254 +121.318 +183.300 +127.300 +184.298 +243.260 +182.297 +173.305 +261.249 +168.288 +113.320 +314.265 +215.287 +162.302 +175.301 +106.324 +231.278 +165.293 +170.306 +193.296 +327.258 +215.283 +224.279 +156.304 +157.304 +223.280 +320.256 +226.281 +118.317 +149.294 +156.293 +170.297 +205.291 +168.293 +222.284 +194.300 +134.303 +167.296 +123.317 +150.305 +168.291 +125.307 +184.296 +154.307 +150.293 +134.312 +154.290 +178.287 +336.252 +200.293 +198.300 +311.264 +099.323 +145.309 +140.301 +173.294 +163.306 +125.302 +212.285 +114.311 +161.303 +169.301 +164.300 +173.297 +320.260 +189.297 +353.238 +188.297 +172.294 +198.292 +151.297 +211.289 +148.296 +142.297 +188.281 +104.324 +328.254 +199.292 +119.305 +228.279 +149.305 +061.333 +125.316 +189.303 +160.306 +126.315 +164.289 +202.289 +137.303 +201.289 +155.290 +187.303 +185.285 +136.313 +120.306 +095.323 +123.303 +170.303 +318.260 +131.305 +164.292 +139.300 +179.296 +192.294 +202.290 +169.294 +184.301 +178.303 +122.302 +160.290 +321.256 +187.295 +322.258 +177.301 +309.264 +321.259 +139.313 +180.303 +161.290 +314.256 +193.299 +188.294 +128.306 +165.290 +189.296 +129.313 +337.252 +135.313 +122.303 +121.319 +214.284 +189.280 +173.304 +185.304 +123.302 +206.288 +128.317 +130.316 +166.296 +130.314 +176.300 +098.325 +195.296 +324.254 +169.297 +148.297 +192.299 +177.296 +273.238 +166.303 +117.320 +271.242 +097.325 +172.291 +112.321 +158.293 +158.294 +189.304 +359.238 +171.293 +213.288 +183.286 +135.304 +172.289 +222.283 +098.324 +309.267 +202.293 +226.279 +256.252 +116.305 +185.284 +142.301 +142.310 +322.262 +318.256 +191.296 +149.308 +187.300 +317.256 +153.305 +143.296 +185.297 +354.238 +327.256 +120.305 +179.299 +180.286 +176.289 +144.308 +152.293 +319.260 +128.314 +191.303 +170.293 +229.280 +269.244 +217.282 +125.308 +155.293 +155.307 +323.255 +186.291 +140.309 +187.280 +206.289 +173.301 +250.256 +214.287 +210.288 +146.310 +151.294 +198.299 +310.267 +177.300 +225.280 +157.295 +097.326 +142.298 +127.301 +195.299 +164.302 +183.295 +203.291 +130.301 +125.317 +188.295 +329.253 +184.285 +165.302 +263.248 +175.304 +126.302 +159.306 +127.307 +302.267 +218.286 +167.292 +156.295 +194.302 +312.265 +216.286 +179.286 +095.324 +169.293 +141.302 +228.280 +174.298 +249.256 +174.305 +152.308 +336.251 +173.286 +145.295 +146.308 +124.318 +190.281 +217.283 +167.293 +158.303 +138.300 +150.294 +151.308 +175.298 +169.302 +156.305 +320.261 +103.324 +110.324 +152.304 +147.295 +161.304 +127.317 +215.284 +190.302 +184.297 +109.324 +170.305 +178.297 +321.261 +170.296 +112.320 +192.296 +320.259 +275.239 +108.324 +149.295 +226.280 +160.291 +192.280 +124.304 +332.251 +162.294 +315.263 +181.296 +205.290 +159.293 +174.286 +163.300 +328.256 +184.303 +176.286 +179.300 +182.304 +338.252 +161.296 +123.308 +160.304 +171.299 +122.318 +162.300 +215.285 +334.254 +137.300 +118.304 +158.304 +201.290 +159.291 +156.302 +146.298 +165.291 +138.303 +186.296 +086.331 +194.299 +264.247 +187.304 +134.315 +129.301 +121.301 +155.289 +167.298 +167.303 +194.292 +169.292 +136.303 +174.300 +168.292 +137.304 +102.324 +135.312 +325.257 +177.297 +314.263 +170.299 +166.304 +152.307 +136.311 +132.304 +225.282 +175.295 +271.243 +101.327 +277.239 +220.283 +331.253 +213.287 +188.280 +188.299 +193.298 +229.278 +184.281 +184.291 +173.291 +257.251 +118.318 +189.299 +323.258 +198.291 +327.257 +200.299 +251.255 +176.298 +182.281 +310.263 +126.300 +310.266 +161.301 +326.253 +172.288 +180.283 +131.315 +315.260 +163.304 +217.286 +155.296 +322.256 +272.241 +312.264 +170.290 +189.301 +174.292 +143.298 +204.291 +240.262 +093.326 +155.303 +141.301 +265.245 +138.311 +186.304 +179.298 +276.238 +152.295 +219.282 +264.246 +168.304 +160.292 +146.299 +190.280 +187.301 +172.301 +147.308 +124.319 +318.262 +122.300 +180.299 +153.308 +162.305 +170.301 +210.285 +198.298 +179.285 +102.326 +217.284 +333.253 +194.296 +143.311 +335.253 +100.324 +135.303 +157.296 +173.289 +313.263 +202.292 +142.299 +123.301 +175.285 +182.295 +137.311 +105.325 +130.300 +175.303 +161.292 +173.299 +320.258 +172.296 +216.283 +149.296 +156.296 +154.296 +126.303 +117.306 +097.323 +100.326 +101.326 +166.290 +171.290 +200.291 +150.307 +103.323 +131.316 +124.307 +324.258 +155.306 +195.293 +177.303 +338.251 +195.300 +207.289 +059.333 +308.266 +157.289 +147.298 +146.309 +178.289 +310.264 +116.319 +151.307 +258.251 +159.295 +223.284 +232.280 +190.296 +221.283 +349.238 +325.256 +183.281 +156.306 +167.304 +178.296 +198.294 +188.296 +162.292 +173.296 +200.294 +212.287 +225.281 +331.256 +148.298 +189.281 +157.292 +196.301 +183.297 +176.302 +124.316 +195.294 +159.289 +177.298 +317.259 +184.280 +336.253 +322.259 +096.325 +192.297 +128.316 +147.294 +180.297 +178.302 +224.281 +182.298 +145.296 +303.266 +212.286 +184.295 +172.287 +104.325 +191.298 +227.280 +333.251 +173.288 +176.297 +185.302 +159.301 +308.256 +162.291 +222.280 +160.295 +102.323 +136.302 +149.297 +221.282 +122.305 +114.304 +323.257 +138.312 +155.305 +152.306 +123.319 +170.295 +058.334 +199.290 +139.311 +329.255 +176.295 +149.298 +172.302 +117.318 +157.293 +147.299 +154.303 +221.281 +165.304 +260.250 +113.305 +190.298 +143.310 +134.302 +234.279 +219.284 +210.287 +173.293 +152.291 +126.306 +193.292 +139.303 +121.317 +129.315 +333.254 +196.298 +175.302 +178.284 +154.293 +129.317 +266.245 +264.248 +197.295 +274.238 +151.293 +205.288 +160.289 +325.254 +195.298 +133.304 +168.301 +180.300 +144.296 +186.284 +131.300 +124.301 +208.289 +120.303 +158.296 +161.293 +101.324 +223.281 +118.319 +190.291 +163.290 +165.295 +181.284 +224.282 +198.290 +150.292 +191.293 +178.299 +196.292 +143.309 +314.260 +120.320 +167.305 +190.295 +331.252 +309.265 +158.305 +335.251 +115.320 +162.303 +322.260 +316.265 +309.256 +115.319 +147.297 +320.262 +265.247 +192.291 +163.302 +170.298 +268.244 +319.262 +199.293 +191.295 +162.296 +315.262 +167.295 +176.285 +330.251 +226.282 +181.298 +119.304 +132.314 +166.291 +184.300 +160.305 +150.306 +326.256 +209.287 +143.308 +182.284 +140.302 +189.298 +187.296 +227.281 +179.284 +188.302 +187.282 +210.286 +193.293 +114.319 +330.252 +273.239 +123.300 +321.257 +122.301 +318.261 +188.282 +125.301 +150.296 +154.306 +127.303 +313.266 +171.306 +158.295 +125.315 +163.301 +166.301 +123.316 +176.292 +167.290 +158.290 +157.305 +192.301 +274.239 +318.258 +197.298 +157.301 +137.302 +189.302 +145.308 +120.318 +219.281 +169.295 +168.299 +311.263 +204.292 +136.314 +130.315 +304.266 +148.294 +164.306 +208.287 +169.298 +129.314 +174.302 +180.298 +175.297 +153.295 +179.304 +107.324 +174.295 +058.333 +141.299 +177.295 +218.282 +158.292 +166.302 +172.299 +157.291 +195.295 +156.289 +135.314 +180.302 +176.301 +183.299 +333.252 +317.261 +318.264 +321.262 +214.285 +147.293 +172.290 +209.290 +178.283 +183.283 +308.265 +185.301 +169.289 +146.307 +331.251 +186.298 +266.246 +118.320 +337.251 +143.301 +169.305 +194.294 +213.285 +254.253 +167.291 +162.290 +160.293 +232.279 +328.258 +305.267 +350.238 +228.281 +204.288 +160.302 +176.288 +170.292 +332.255 +179.302 +091.327 +211.285 +263.247 +149.309 +201.298 +324.260 +269.243 +191.302 +181.300 +124.300 +094.325 +174.290 +323.256 +172.303 +191.301 +201.292 +181.285 +163.296 +339.251 +212.288 +202.298 +193.301 +184.282 +116.304 +187.291 +190.297 +098.323 +145.310 +157.294 +194.298 +139.312 +169.300 +311.267 +131.301 +141.311 +153.306 +117.304 +322.261 +143.300 +207.290 +191.297 +271.241 +145.299 +312.266 +096.326 +128.301 +173.302 +171.288 +140.311 +306.266 +163.303 +111.321 +203.292 +253.254 +320.263 +220.281 +175.292 +333.255 +158.291 +319.261 +156.294 +164.295 +166.305 +168.298 +207.287 +126.301 +308.264 +179.287 +171.300 +166.292 +118.306 +161.302 +151.295 +188.303 +189.291 +153.296 +326.259 +159.290 +327.254 +224.283 +165.289 +196.291 +187.281 +167.302 +148.293 +157.290 +165.301 +316.264 +331.254 +175.287 +115.304 +329.252 +149.293 +262.248 +178.298 +170.289 +171.296 +216.287 +186.302 +148.307 +163.291 +152.305 +351.238 +164.303 +121.306 +192.300 +330.253 +275.238 +151.292 +192.281 +166.299 +119.320 +174.299 +227.282 +160.296 +168.306 +133.313 +159.294 +334.251 +162.295 +160.303 +060.333 +183.304 +179.283 +134.313 +140.312 +315.264 +138.301 +127.314 +158.306 +314.261 +183.296 +213.284 +164.299 +127.306 +103.325 +137.314 +116.303 +313.265 +268.245 +126.318 +267.245 +190.303 +115.305 +173.290 +165.306 +140.310 +159.292 +154.305 +177.304 +171.298 +153.293 +182.282 +188.291 +211.288 +201.291 +329.257 +186.295 +171.301 +313.256 +171.289 +188.300 +144.298 +167.301 +326.254 +151.306 +134.314 +332.254 +114.320 +186.282 +168.297 +305.266 +209.286 +150.309 +270.243 +216.284 +163.292 +211.286 +161.295 +154.289 +159.302 +133.302 +154.294 +156.291 +121.304 +181.286 +319.256 +172.304 +175.300 +197.293 +150.295 +199.298 +325.258 +123.305 +170.288 +146.297 +122.319 +117.317 +317.260 +218.283 +185.298 +180.295 +231.279 +176.304 +155.294 +316.263 +312.256 +169.306 +102.325 +318.263 +133.312 +147.307 +113.321 +186.299 +327.253 +153.304 +175.286 +315.261 +194.291 +162.301 +196.294 +132.316 +252.254 +136.304 +222.282 +167.297 +161.300 +164.294 +219.285 +182.302 +313.264 +177.289 +171.294 +177.284 +185.281 +242.261 +174.301 +176.299 +314.262 +334.252 +188.304 +191.281 +183.301 +148.295 +124.308 +206.290 +164.305 +144.310 +255.253 +138.310 +136.312 +220.284 +105.324 +200.292 +154.291 +277.238 +178.286 +133.303 +141.310 +144.309 +140.300 +311.265 +307.267 +185.300 +187.298 +189.294 +173.298 +272.242 +194.295 +316.259 +141.309 +193.302 +267.244 +193.295 +173.295 +128.302 +188.298 +148.306 +330.254 +157.303 +152.294 +145.298 +094.326 +124.303 +177.292 +208.288 +170.291 +217.285 +219.283 +117.305 +168.290 +186.303 +134.304 +126.307 +204.290 +155.304 +099.324 +168.303 +276.239 +167.289 +139.301 +195.292 +119.318 +172.300 +174.293 +162.306 +170.302 +192.293 +181.295 +159.296 +140.299 +355.238 +129.302 +322.257 +171.297 +176.290 +221.284 +262.249 +096.323 +164.291 +183.282 +178.304 +183.298 +197.291 +316.260 +177.288 +162.293 +191.291 +163.289 +181.303 +185.280 +172.295 +224.280 +175.293 +352.238 +328.255 +119.306 +161.291 +191.280 +323.259 +179.295 +162.289 +184.302 +324.259 +118.305 +326.258 +180.304 +230.279 +182.286 +182.299 +098.326 +121.320 +122.304 +186.281 +092.327 +197.300 +182.301 +103.326 +222.281 +160.294 +164.293 +166.298 +334.253 +154.295 +192.295 +172.292 +119.302 +095.325 +159.303 +206.291 +192.298 +306.267 +155.292 +123.318 +120.304 +117.321 +142.312 +126.317 +191.299 +128.299 +148.309 +324.257 +096.324 +116.306 +321.258 +190.299 +153.290 +323.260 +176.303 +185.283 +178.301 +275.240 +307.265 +169.288 +133.314 +168.300 +196.299 +173.287 +145.297 +210.289 +151.305 +104.326 +251.254 +144.297 +273.240 +171.302 +130.313 +175.289 +156.292 +172.293 +101.323 +111.306 +340.251 +272.240 +165.294 +223.282 +329.254 +169.303 +128.300 +279.238 +183.285 +123.304 +180.296 +143.297 +316.262 +113.319 +165.303 +185.299 +113.306 +142.309 +206.287 +149.307 +253.253 +154.292 +129.316 +203.290 +178.285 +110.321 +115.306 +196.293 +193.291 +141.300 +163.293 +119.303 +124.302 +191.300 +125.318 +330.255 +133.315 +192.302 +180.282 +184.299 +209.289 +175.290 +164.301 +328.252 +199.294 +311.266 +176.284 +099.325 +203.288 +182.300 +174.297 +166.293 +181.297 +125.300 +356.238 +132.315 +139.302 +259.250 +129.305 +178.300 +187.297 +307.266 +145.300 +189.300 +191.294 +183.302 +173.300 +317.264 +164.290 +309.266 +109.321 +139.310 +146.294 +184.284 +188.283 +177.285 +161.289 +166.300 +150.297 +186.280 +180.287 +312.263 +170.304 +157.302 +127.302 +132.300 +181.282 +197.299 +157.306 +197.292 +169.296 +133.300 +230.280 +167.294 +187.283 +172.297 +358.238 +168.296 +182.285 +233.279 +195.301 +174.287 +174.304 +120.317 +171.305 +130.305 +161.305 +107.325 +145.307 +208.290 +326.257 +125.304 +190.282 +171.287 +127.316 +185.303 +189.295 +175.299 +193.294 +147.310 +360.238 +321.260 +116.320 +190.300 +112.306 +215.286 +174.288 +137.301 +316.261 +175.296 +129.300 +357.238 +122.317 +130.304 +183.284 +317.262 +161.306 +187.299 +319.259 +186.297 +310.256 +175.288 +194.293 +138.302 +169.299 +124.315 +185.295 +314.264 +106.325 +176.287 +328.257 +254.252 +146.295 +252.255 +186.300 +167.299 +160.301 +184.304 +274.240 +213.286 +182.303 +177.287 +181.302 +172.298 +158.302 +168.289 +174.303 +201.293 +118.303 +094.324 +318.259 +174.296 +179.303 +193.297 +193.300 +119.317 +158.289 +225.283 +216.285 +311.256 +173.292 +184.283 +183.303 +229.279 +332.253 +231.280 +214.286 +177.286 +141.312 +200.298 +118.321 +203.298 +165.292 +163.305 +135.311 +173.303 +180.284 +250.255 +301.267 +131.314 +166.294 +361.238 +153.294 +208.286 +169.291 +168.295 +204.289 +195.291 +181.301 +194.301 +132.303 +141.298 +319.263 +119.319 +332.256 +179.301 +163.295 +121.302 +179.288 +330.256 +159.304 +319.258 +201.299 +127.315 +147.309 +202.291 +165.296 +223.279 +185.282 +122.306 +169.304 +152.292 +187.302 +174.291 +153.307 +115.318 +135.302 +170.300 +196.300 +304.267 +100.325 +171.295 +100.323 +335.252 +325.259 +322.255 +198.293 +182.296 +164.296 +331.255 +156.303 +181.283 +220.282 +306.265 +149.306 +126.316 +232.278 +320.257 +225.279 +265.246 +162.304 +155.295 +193.280 +143.299 +115.321 +278.238 +308.267 +093.327 +132.313 +312.262 +151.296 +179.297 +207.288 +155.291 +142.311 +185.291 +178.288 +200.290 +116.318 +317.263 +316.256 +315.265 +203.289 +153.291 +137.313 +189.282 +121.305 +165.299 +328.253 +165.300 +177.302 +116.321 +248.257 +177.299 +131.304 +164.304 +183.280 +128.305 +172.305 +111.324 +101.325 +218.284 +211.287 +175.291 +163.294 +095.326 +171.303 +227.279 +209.288 +152.296 +188.301 +114.306 +168.305 +223.283 +142.300 +171.291 +150.308 +324.256 +148.308 +315.256 +099.326 +186.301 diff --git a/docs/source/pipeline_canfar.md b/docs/source/pipeline_canfar.md index cfba3d2f..ee4c6199 100644 --- a/docs/source/pipeline_canfar.md +++ b/docs/source/pipeline_canfar.md @@ -1,159 +1,505 @@ -patch="P7" +# Running `ShapePipe` processing and post-processing pipelines on CANFAR + +Documentation to create ShapePipe output products for catalogues v1.x. + +## Initial Setup + +### CANFAR Login + +Login to the canfar system with + +```bash +canfar auth login +``` + +This can be done from at notebook or terminal within the canfar science portal, +or any remote terminal that has the canfar library installed. + +Check authentication status with + +```bash +canfar auth list +``` + +If not on "default", run + +```bash +canfar auth switch default +``` + +### Set variables (optional) + +Set the current patch in the shell as + +```bash +patch=P[1-9] +``` + +For convenience, the current PSF model can be set as environment variable, e.g.: + +```bash psf="psfex" +``` + +Allowed are `psfex` and `mccd`. -# Terminal title +Setting the terminal title to display the patch can be useful for long jobs, to keep track of which terminal +runs which patch: + +```bash echo -ne "\033]0;$patch\007" +``` + +### Prepare run directory + +First, go to the dedicated directory with + +```bash +cd /path/to/version/$patch +``` -# Run directory -dir=~/cosmostat/v2/pre_v2/$psf/$patch -cd $dir +Next, set links to the tile number list and configuration directory: -# Get tile number list +```bash ln -s ~/shapepipe/auxdir/CFIS/tiles_202106/tiles_$patch.txt tile_numbers.txt +ln -s ~/shapepipe/example/cfis +``` +Create output and debug log directories -# Get images +```bash +mkdir -p output +mkdir -p debug +``` -## Download and link separately +Finally, create and link to central image storage directories for tiles and exposures: -### Download -### Create and link to central image storage directory +```bash mkdir -p ~/cosmostat/v2/data_tiles/$patch ln -s ~/cosmostat/v2/data_tiles/$patch data_tiles mkdir -p ~/cosmostat/v2/data_exp/$patch ln -s ~/cosmostat/v2/data_tiles/$patch data_exp +``` -### Download and move tiles -ln -s ~/shapepipe/example/cfis -mkdir -p output +## `ShapePipe` processing + +Now, everything should be ready to start running `ShapePipe` for the weak lensing processing. The following +details all necessary steps. + +### Get Images + +We first download images, and in a second run create symbolic links with the proper pipeine naming scheme. + +#### Download and move tiles + +When running the main `ShapePipe` script `shapepipe_run`, the following env variable needs to point +to the current working directory + +```bash export SP_RUN=`pwd` +``` +Now we run the first module (`get_images_runner`) to download the tile images together with the weight files. +This run can get interrupted by VOSpace I/O or connection errors. In that case, +we move new files to the image storage directory, remove the previous (now void of images) run directory, +and update the run log file. We also check the number of previous and new tiles. + +```bash shapepipe_run -c cfis/config_Git_vos.ini -ls -l data_tiles/ | wc; mv -i output/run_sp_Git_*/get_images_runner/output/CFIS.???.???.*fits* data_tiles; ls -l data_tiles/ | wc -rm -rf output/run_sp_Git_*; update_runs_log_file.py -# repeat the above block +ls -l data_tiles/ | wc +mv -i output/run_sp_Git_*/get_images_runner/output/CFIS.???.???.*fits* data_tiles +ls -l data_tiles/ | wc +rm -rf output/run_sp_Git_* +update_runs_log_file.py +``` -### Find exposures; this run can be stopped after Fe +Repeat the above block as needed. + +### Find Exposures + +With all tile images (= stacks) downloaded, we can inquire their headers to identify the exposures that were used +to create the stacks. This call to the pipeline also creates the symbolic links to the downloaded tile images. + +```bash shapepipe_run -c cfis/config_GitFe_symlink.ini -# You can also run Fe alone +``` + +(One could also run `Fe` alone.) -### Download and move exposures +### Download and Move Exposures +The last module create exposure lists on output. These are now used to download all exposures. As for the tile downloads, +we have to account for VOSpace errors. + +```bash shapepipe_run -c cfis/config_Gie_vos.ini mv -i output/run_sp_Gie_*/get_images_runner/output/*.fits*fz data_exp rm -rf output/run_sp_Gie_* update_runs_log_file.py -# repeat the above; or: -while true; do shapepipe_run -c cfis/config_Gie_vos.ini; ls -l data_exp/ | wc; mv -i output/run_sp_Gie_*/get_images_runner/output/*.fits*fz data_exp; ls -l data_exp/ | wc; rm -rf output/run_sp_Gie_*; update_runs_log_file.py; done -# Make sure that after all images are downloaded there is no Gie run. This would -# mess up later modules since last:get_image_runner could point to this run. +``` + +Repeat the above by hand, or peform it in an automatic loop: + +```bash +while true; do + shapepipe_run -c cfis/config_Gie_vos.ini + ls -l data_exp/ | wc + mv -i output/run_sp_Gie_*/get_images_runner/output/*.fits*fz data_exp + ls -l data_exp/ | wc + rm -rf output/run_sp_Gie_* + update_runs_log_file.py +done +``` + +**Note:** Make sure that after all images are downloaded there is no `Gie` run in the output directory. +This would mess up later modules since `last:get_image_runner` could point to this run. -### Create links (and re-run Fe, not necessary) +### Create tile links again (necessary?) + +If necessary, e.g. because a previous `Git` run is no longer valid, re-create the symbolic links to the downloaded tiles with + +```bash job_sp_canfar.bash -p $psf `cat tile_numbers.txt` -j 1 -r symlink +``` + +### Uncompress tile weights + +The downloaded tile weights are compressed. The following call uncompresses all. -# Get single-HDU single-exposure IDs file (from missing 32 job) -~/shapepipe/scripts/python/summary_run.py P$patch [32] +```bash +shapepipe_run -c cfis/config_tile_Uz.ini +``` -# Mask tiles +### Mask tiles -## Run repeatedly if necessary +This step is done globally for all tiles. There might be job failures or interruptions. The following +command to the `ShapePipe` job script can be run repeatedly; already created masks will be skipped. + +```bash job_sp_canfar.bash -p $psf -n $OMP_NUM_THREADS -j 4 +``` + +If masks were created in more than one run, i.e. situated in more than one output directory, these have to be +combined for subsequent pipeline module runs. This is done by creating a new output directory with symbolic +links, using the script -## Combine all runs +```bash combine_runs.bash -c flag_tile +``` + +## Tile detection + +We can finally run our first module using the canfar submission system. First, determine the number of optimal jobs such that at a given +time the allowed maximum of 512 running jobs is not exceeded. +Set as `N_PAR` (number of parallel jobs) a number between 1 and 8. -# Tile detection -curl_canfar_local.sh -j 16 -f tile_numbers.txt -p $psf -N $OMP_NUM_THREADS +```bash +canfar_submit_job -j 16 -f tile_numbers.txt -P N_PAR -v -s +``` -# Option 0, global split and exp masks: sp_local=0 -# Todo: split Uz and SpMh +Now, run the previous command with that number `JMAX` -# For sp_local=- both mh_local (0, 1) are ok +```bash +canfar_submit_job -j 16 -f tile_numbers.txt -P N_PAR -v -J JMAX +``` + +### Exposure Processing + +#### Option 0: Global split and exp masks (deprecated; used for earlier v1.x patch runs) + +For this option, set `sp_local=0`. + +**TODO: ** Split Uz and SpMh + +For `sp_local=-` both `mh_local` (0, 1) are ok: + +```bash export mh_local=0 -#export mh_local=1 +``` -## Uncompress weights, split exposures into single HDUs -job_sp_canfar.bash -p $psf -n $OMP_NUM_THREADS -j 2 +#### Option 0: Mask exposures (deprecated) -# Mask exposures +Run repeatedly if necessary: -## Run repeatedly if necessary +```bash job_sp_canfar.bash -p $psf -n $OMP_NUM_THREADS -j 8 +``` -# Combine all runs +Combine all runs: + +```bash combine_runs.bash -c flag_exp +``` + +### Option 1: Local split and mask exposures (recommended) -# Option 1: sp_local=1, local split and mask exp +Optional: Enable flags for local split processing and merge header runs as + +```bash +export sp_local=1 export mh_local=1 +``` + +These flags are automatically set to 1 in the new job scripts. + + +Get single-HDU single-exposure IDs file (from missing 32 job): + +```bash +summary_run P$patch 32 +cp summary/missing_job_32_all.txt exp_shdu.txt +``` + +### Split exposures + +First, determine the number of maximum jobs with the option `-s` (see above). Then, submit with -# Split exposures -curl_canfar_local.sh -j 2 -f all.txt -p $psf -N $OMP_NUM_THREADS +```bash +canfar_submit_job -j 2 -v -f exp_shdu.txt -v -P N_PAR -J JMAX +``` -# Mask exposures -curl_canfar_local.sh -j 8 -f all.txt -p $psf -N $OMP_NUM_THREADS +### Mask exposures -# Exposure detection +```bash +canfar_submit_job -j 8 -f exp_shdu.txt -v -P N_PAR -J JMAX +``` -cp summary/missing_job_32_sextractor.txt all.txt -curl_canfar_local.sh -j 32 -m $mh_local -f all.txt -p $psf -N $OMP_NUM_THREADS +### Exposure detection -# Tile preparation -curl_canfar_local.sh -j 64 -f tile_numbers.txt -p $psf -N $OMP_NUM_THREADS +```bash +canfar_submit_job -j 32 -f exp_shdu.txt -v -P N_PAR -J JMAX +``` -# Tile shape measurement -curl_canfar_local.sh -j 128 -f tile_numbers.txt -p $psf -N 8 +### Tile preparation -# Merge subcatalogues -curl_canfar_local.sh -j 256 -f tile_numbers.txt -p $psf -N 8 +```bash +canfar_submit_job -j 64 -f tile_numbers.txt +``` -# Create final cat -curl_canfar_local.sh -j 512 -f tile_numbers.txt -p $psf -N $OMP_NUM_THREADS -# Run in parallel -cat mc.txt | xargs -I {} -P 16 bash -c 'init_run_exclusive_canfar.sh -p psfex -j 512 -e {} --n_smp 1' +### Tile shape measurement -# Combine all final cats in common output dir as links -combine_runs.bash -c final -p psfex +```bash +canfar_submit_job -j 128 -f tile_numbers.txt +``` -# Merge all final cats -# (W3: 140GB RAM) -# in /path/to/$psf +### Merge sub-catalogues + +```bash +canfar_submit_job -j 256 -f tile_numbers.txt +``` + +### Create final catalogues + +```bash +canfar_submit_job -j 512 -f tile_numbers.txt +``` + +This was the last `ShapePipe` module to run for main processing. + + +### Merge all final catalogues + +The last step of `ShapePipe` processing is, per patch, to merget all final catalogues. This is done via a python script, as follows. +First, change to parent directory `/path/to/version` and run the following command for all patches + +```bash patchnum=`tr $patch P ''` -create_final_cat.py -m final_cat_$patch.hdf5 -i . -p $patch/cfis/final_cat.param -P $patchnum -o $patch/n_tiles_final.txt -v +create_final_cat.py -m final_cat_$patch.hdf5 -i . -p $patch/cfis/final_cat.param \ + -P $patchnum -o $patch/n_tiles_final.txt -v +``` + +## Additional `ShapePipe` processing + + +### Create star Catalogue + +We can additionaly create a combined star catalogue, with star shapes projecte from detector to world coordinates. +This is useful for validation and galaxy-PSF/star correlation diagnostics. + +#### Combine all PSF runs + +In each patch directory /path/to/version/$patch, run + +```bash +combine_runs.bash -p $psf -c psf +``` + +to create a single output directory of PSF files (symbolic links). -# Star catalogue -combine_runs.bash -p $psf -c psf +Optionally, to create and plot results for this patch only: + +```bash shapepipe_run -c $SP_CONFIG/config_Ms_$psf.ini shapepipe_run -c $SP_CONFIG/config_Pl_$psf.ini +``` + +#### Convert star catalogue to wCS + +Convert all input validation PSF files and create directories per patch `P?`. +Create files `validation_psf_conv--.fits` (for the v1.4 setup only one file): + +```bash +cd /path/to/version +mkdir stat_car +cd star_cat +``` -# Convert star cat to WCS -## Convert all input validation psf files and create directories par patch -## psf_conv_all/P? -cd ../star_cat +For each patch run -# Create files validation_psf_conv--.fits -# (for the v1.4 setup only one file) - convert_psf_pix2world.py -i .. -P $patchnum -v +```bash +convert_psf_pix2world.py -i .. -P $patchnum -v +``` -# Combine previously created files as links within one SP run dir -# (for the v1.4 setup only one link -cd P$patch +Combine previously created files as links within one ShapePipe run directory (for the v1.4 setup only one link). +First (and optiohnal), create a subdir for a run and link to the input patches: + +```bash +cd /path/to/version/star_cat +mkdir v1.6 +ln -s ../P1 +ln -s ../P2 +... +``` + +Next, create links to all `validation_conv` runs: + +```bash combine_runs.bash -p psfex -c psf_conv +``` + +Merge all converted star catalogues and create `final-starcat.fits`: -# Merge all converted star catalogues and create final-starcat.fits +```bash export SP_RUN=`pwd` shapepipe_run -c ~/shapepipe/example/cfis/config_Ms_psfex_conv.ini +``` + +Rename to general PSF and star catalogue used for all ("a") sub-versions: + + +```bash +cp output/run_sp_Ms/merge_starcat_runner/output/full_starcat-0000000.fits \ + unions_shapepipe_psf_2024_v1.6.a.fits +``` + +The FITS file `CATTYPE` (newer version) should be `validation_psf_conf`. + +## Post-processing + +The following post-processing steps are performed with the library `sp_validation`. + +### Extract Information + +First, we extract all information from the final catalogue, per patch. We copy +the parameter file and set links to the catalogues and `ShapePipe` config directory. + +```bash +cd /path/to/version/$patch +cp ~/astro/repositories/github/sp_validation/notebooks/params.py . +ln -s ~/v1.3.x/final_cat_$patchnum3.hdf5 # not ../final_cat_P$patchnum.hdf5 ! +ln -s output/run_sp_MsPl/mccd_merge_starcat_runner/output/full_starcat-0000000.fits +ln -s ~/astro/repositories/github/shapepipe/example/cfis +``` + +Then edit `params.py`: Set patch name; set `wrap_ra` for P2. + +Now we can run the script, recommended via job submission on candide. For large patches, +this requies a job with a large memory, e.g. with `mem=380000` + + +```bash +[squeue] python ~/astro/repositories/github/sp_validation/notebooks/extract_info.py +``` + +This creates a patch-wise comprehensive catalogue. + +### Create global comprehensive catalogues + +```bash +cd /patch/to/version +[squeue] python ~/astro/repositories/github/sp_validation/scripts/create_joint_comprehensive_cat.py \ + -v v1.6.c -v -p P1+P2+P3+P4+P5+P6+P7+P8+P9 +``` + +This creates the file `unions_shapepipe_comprehensive_2024_v1.6.c.hdf5`. + + +### Apply structural masks + +First, edit the Python script `~/astro/repositories/github/sp_validation/notebooks/demo_apply_hsp_masks.py` +to match catalogue name. Check the coverage mask input file (see below). +Run the script to apply the healsparse structural masks: + +```bash +[squeue] python ~/astro/repositories/github/sp_validation/notebooks/demo_apply_hsp_masks.py +``` + +This creates the file `unions_shapepipe_comprehensive_struct_2024_v1.6.c.hdf5`. + + +### Define sample, calibrate catalogue + +We are close to finally perform the last post-processing step, which is the calibration. First, the final galaxy sample +in question needs to be defined, with masks and cuts to apply from a `yaml` config file. A number of pre-defined files +can be found in `~/astro/repositories/github/sp_validation/calibration`. + +For example, to create `v1.6.6`, the steps are: + +```bash +cd /path/to/version +mkdir -p v1.6.6 +cd v1.6.6 +ln -s ~/astro/repositories/github/sp_validation/calibration/mask_v1.X.6.yaml config_mask.yaml +ln -s ..//unions_shapepipe_comprehensive_struct_2024_v1.6.c.hdf5 unions_shapepipe_comprehensive_struct_2024_v1.X.c.hdf5 +[squeue] python ~/astro/repositories/github/sp_validation/calibrate_comprehensive_cat.py +``` + +calibrate_comprehensive + +### Create coverage mask + +First, on canfar, move to the directory that has the patch subdirectories. + +```bash +cd /path/to/version +``` + +#### Get exposure numbers + +If the file `$patch/exp_numbers.txt` does not exist for a given patch, create it with the summary program + +```bash +summary_run $patch 1 +``` + +Now, create the list of CCDs that have PSF information with + +```bash +get_ccds_with_psf -v -V v1.6 +``` + +Next, download exposures headers + +```bash +download_headers -i ccds_with_psfs_v1.6.txt -o headers_v1.6 -v +``` + +From the headers, the CCD corner coordinates are extracted with +```bash +extract_field_corners -i headers_v1.6 -v +``` +Then, build the healsparse coverage mask file as +```bash +build_coverage_map +``` -# Extra stuff +Use `plot_coverage_map` to create plots of the coverage mask. -## Delete jobs -SSL=~/.ssl/cadcproxy.pem -SESSION=https://ws-uv.canfar.net/skaha/v0/session -for ID in `cat session_IDs.txt`; do echo $ID; curl -X DELETE -E $SSL $SESSION/$ID; done +## Extra Utilities -## Run in terminal in parallel (-e needs to be last arg) -cat all.txt | xargs -P 16 -n 1 init_run_exclusive_canfar.sh -j 64 -p psfex -n -e +### Run in Terminal in Parallel -## Get missing jobs that are not currently running -stats_jobs_canfar.sh -grep -F -v -f jobs_running.txt summary/missing_job_128_ngmix_runner_3.txt > all3.txt +```bash +cat IDs.txt | xargs -I {} -P 16 bash -c 'init_run_exclusive_canfar.sh -j 512 -e {}' +``` diff --git a/environment.yml b/environment.yml index ebb04d2c..bec9facf 100644 --- a/environment.yml +++ b/environment.yml @@ -9,11 +9,12 @@ channels: - conda-forge - defaults dependencies: - - python=3.9 + - python=3.10 - pip>=21.2.4 - astromatic-psfex==3.21.1 - astromatic-source-extractor==2.25.0 - astropy==5.2 + - astroquery - automake - autoconf - cmake diff --git a/example/cfis/config_Git_vos.ini b/example/cfis/config_Git_vos.ini index 26edf3ef..f1e59291 100644 --- a/example/cfis/config_Git_vos.ini +++ b/example/cfis/config_Git_vos.ini @@ -66,7 +66,7 @@ NUMBERING_SCHEME = # Input path where original images are stored. Can be local path or vos url. # Single string or list of strings -INPUT_PATH = vos:cfis/tiles_DR5, vos:cfis/tiles_DR5 +INPUT_PATH = vos:cfis/tiles_DR6, vos:cfis/tiles_DR6 # Input file pattern including tile number as dummy template INPUT_FILE_PATTERN = CFIS.000.000.r, CFIS.000.000.r.weight diff --git a/pyproject.toml b/pyproject.toml index bd83613c..b20220ec 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,11 +9,17 @@ authors = [ { name = "Martin Kilbinger", email = "martin.kilbinger@cea.fr" } ] license = { "file" = "LICENSE" } -requires-python = ">=3.11" +requires-python = ">=3.10" dependencies = [ "joblib>=0.13", "modopt>=1.2", - "numpy>=1.14" + "numpy>=1.14", + "pandas", + "canfar", + "sf_tools", + "h5py", + "healsparse", + "skyproj", ] @@ -29,6 +35,10 @@ lint = [ "black", "isort" ] +plot = [ + "skyproj", + "matplotlib" +] release = [ "build", "twine", @@ -39,11 +49,21 @@ test = [ "pytest-pycodestyle", "pytest-pydocstyle" ] -dev = ["shapepipe[doc,lint,release,test]"] +dev = ["shapepipe[doc,lint,plot,release,test]"] [project.scripts] shapepipe_run = "shapepipe.shapepipe_run:main" +summary_run = "shapepipe.summary_run:main" +canfar_submit_job = "shapepipe.canfar_run:run_job" +canfar_monitor = "shapepipe.canfar_run:run_log" +canfar_monitor_log = "shapepipe.canfar_run:run_monitor_log" +get_ccd_with_psfs = "shapepipe.get_ccds_run:run_ccd_psf_handler" +download_headers = "shapepipe.coverage_run:run_download_headers" +extract_field_corners = "shapepipe.coverage_run:run_extract_corners" +build_coverage_map = "shapepipe.coverage_run:run_build_coverage" +plot_coverage_map = "shapepipe.coverage_run:run_plot_coverage" +coverage_pipeline = "shapepipe.coverage_run:run_pipeline" [tool.pytest.ini_options] addopts = "--verbose --cov=shapepipe" -testpaths = ["shapepipe"] \ No newline at end of file +testpaths = ["shapepipe"] diff --git a/scripts/python/clear_ngmix_prev.py b/scripts/python/clear_ngmix_prev.py new file mode 100644 index 00000000..108b04ca --- /dev/null +++ b/scripts/python/clear_ngmix_prev.py @@ -0,0 +1,155 @@ +#!/usr/bin/env python3 +""" +Clean up previous ngmix run directories for completed tiles. +Removes *_prev directories when the current run has finished. +""" + +import argparse +import os +import re +import shutil +import glob +from pathlib import Path +from astropy.io import fits + + +def get_fits_info(fits_file): + """Get number of objects (NAXIS2 in HDU 1) and number of HDUs.""" + try: + with fits.open(fits_file) as hdul: + n_hdus = len(hdul) + # Get NAXIS2 from HDU 1 (second HDU, index 1) + if len(hdul) > 1: + n_objects = hdul[1].header.get("NAXIS2", "N/A") + else: + n_objects = "N/A (no HDU 1)" + return n_objects, n_hdus + except Exception as e: + return f"Error: {e}", "N/A" + + +def check_finished(log_file): + """Check if 'finished' appears in the log file.""" + try: + with open(log_file, "r") as f: + content = f.read() + return "finished" in content + except Exception as e: + print(f"Warning: Could not read {log_file}: {e}") + return False + + +def main(): + parser = argparse.ArgumentParser( + description="Clean up previous ngmix run directories for completed tiles." + ) + parser.add_argument( + "-n", "--dry-run", + action="store_true", + help="Show what would be removed without actually removing files" + ) + args = parser.parse_args() + + if args.dry_run: + print("dry run mode: No files will be removed\n") + + base_dir = Path("tile_runs") + + # Pattern to match tile IDs like 123.456 + tile_id_pattern = re.compile(r"^\d+\.\d+$") + + # Find all tile ID directories + if not base_dir.exists(): + print(f"Error: {base_dir} does not exist") + return + + tile_dirs = [ + d + for d in base_dir.iterdir() + if d.is_dir() and tile_id_pattern.match(d.name) + ] + + print(f"Found {len(tile_dirs)} tile directories") + + removed_count = 0 + finished_count = 0 + + for tile_dir in sorted(tile_dirs): + tile_id = tile_dir.name + + # Construct path to ngmix_runner directory + ngmix_dir = ( + tile_dir / "output" / "run_sp_tile_ngmix_Ng1u" / "ngmix_runner" + ) + + if not ngmix_dir.exists(): + continue + + # Check for process-*.log files + log_pattern = str(ngmix_dir / "logs" / "process-*.log") + log_files = glob.glob(log_pattern) + + if not log_files: + continue + + # Check if any log file contains "finished" + is_finished = any(check_finished(log_file) for log_file in log_files) + + if is_finished: + finished_count += 1 + + # Path to the _prev directory to remove + prev_dir = tile_dir / "output" / "run_sp_tile_ngmix_Ng1u_prev" + + if prev_dir.exists(): + + # File info of new + ngmix_out_dir = ngmix_dir / "output" + fits_files = list(ngmix_out_dir.glob("ngmix-*.fits")) + if fits_files: + for fits_file in fits_files: + n_objects, n_hdus = get_fits_info(fits_file) + else: + n_objects, n_hdus = (-1, -1) + + # File info of new + prev_out_dir = prev_dir / "output" + fits_files = list(ngmix_out_dir.glob("ngmix-*.fits")) + if fits_files: + for fits_file in fits_files: + n_objects_prev, n_hdus_prev = get_fits_info(fits_file) + else: + n_objects_prev, n_hdus_prev = (-1, -1) + + action = "Would remove" if args.dry_run else "Removing" + print( + f"Tile {tile_id}: {action} {prev_dir} (new: {n_objects}" + + f" {n_hdus}) (prev: {n_objects_prev} {n_hdus_prev})" + ) + + if n_objects < n_objects_prev: + print(f"Warning: {tile_id}") + + if not args.dry_run: + try: + shutil.rmtree(prev_dir) + removed_count += 1 + except Exception as e: + print(f"Error removing {prev_dir}: {e}") + else: + removed_count += 1 + else: + pass + else: + print(f"Tile {tile_id}: Not finished") + + print(f"\nSummary:") + print(f" Tiles with finished runs: {finished_count}") + if args.dry_run: + print(f" Previous directories that would be removed: {removed_count}") + else: + print(f" Previous directories removed: {removed_count}") + + +if __name__ == "__main__": + main() diff --git a/scripts/python/distribute_tiles.py b/scripts/python/distribute_tiles.py new file mode 100755 index 00000000..54dec894 --- /dev/null +++ b/scripts/python/distribute_tiles.py @@ -0,0 +1,289 @@ +#!/arc/home/kilbinger/.conda/envs/shapepipe/bin/python3.10 +""" +distribute_tiles.py + +Uses canfar.helpers.distributed.chunk to automatically distribute tiles +across replicas, then processes each tile assigned to this replica. +""" + +import os +import sys +import subprocess +from multiprocessing import Pool +import fcntl +from canfar.helpers.distributed import chunk + + +def parse_arguments(args): + """ + Extract the file IDs from command line arguments. + + Args: + args (list of str): Original command line arguments (e.g., sys.argv[1:]) + + Returns: + str or None: The value passed with -f, or None if not present + """ + # Default values + parsed = {"dry_run": 0, "parallel_jobs": 1} + + i = 0 + while i < len(args): + if args[i] == '-f' and i + 1 < len(args): + parsed['file_ids'] = args[i + 1] + i += 2 + elif args[i] == '--batch_num' and i + 1 < len(args): + parsed['batch_num'] = int(args[i + 1]) + i += 2 + elif args[i] == '--batch_tot' and i + 1 < len(args): + parsed['batch_tot'] = int(args[i + 1]) + i += 2 + elif args[i] == '--batch_size' and i + 1 < len(args): + parsed['batch_size'] = int(args[i + 1]) + i += 2 + elif args[i] in ('-n', '--dry_run') and i + 1 < len(args): + parsed['dry_run'] = int(args[i + 1]) + i += 2 + elif args[i] == '--parallel_jobs' and i + 1 < len(args): + parsed['parallel_jobs'] = int(args[i + 1]) + i += 2 + elif args[i] == "--debug_out" and i + 1 < len(args): + parsed["debug_out"] = args[i + 1] + i += 2 + else: + i += 1 + + return parsed + + +def get_my_tiles(all_tiles, batch_num, batch_tot, batch_size): + """ + Calculate which tiles this replica should process based on global position. + Args: + all_tiles: List of all tile IDs + batch_num: Current batch number (1-indexed) + batch_tot: Total number of batches + batch_size: Number of replicas per batch + Returns: + list: Tiles assigned to this replica + + """ + # Get local replica info from environment + local_replica_id = int(os.environ.get('REPLICA_ID', 1)) + + start_idx = (batch_num - 1) * batch_size + end_idx = min(batch_num * batch_size, len(all_tiles)) + + batch_tiles = all_tiles[start_idx:end_idx] + print(f"Batch {batch_num}/{batch_tot}, local replica {local_replica_id}/{batch_size}") + print(f"Batch processes tiles {start_idx + 1} to {end_idx} ({len(batch_tiles)} tiles)") + + # Use chunk() to distribute this batch's tiles among local replicas + # chunk() will use REPLICA_ID and REPLICA_COUNT automatically + my_tiles = list(chunk(batch_tiles)) + + return my_tiles + +def get_tile_list(file_ids): + """Read all tile IDs from file. + + Args: + file_ids: Path to file containing tile IDs + + Returns: + list: List of tile ID strings + """ + with open(file_ids, 'r') as f: + tiles = [line.strip() for line in f if line.strip()] + return tiles + + +def build_process_command(tile_id, original_args): + """ + Build command for a single tile by replacing -f with -e . + + Args: + tile_id (str): Tile ID to process + original_args (list of str): Original CLI arguments + + Returns: + list of str: Command ready for subprocess + """ + cmd = [f"{os.environ['HOME']}/shapepipe/scripts/sh/init_run_exclusive_canfar.sh"] + + # Transform arguments: replace -f with -e , + # skip batch arguments, parallel_jobs, and dry_run if not 0, 1 + i = 0 + while i < len(original_args): + if original_args[i] == '-f' and i + 1 < len(original_args): + cmd.extend(['-e', tile_id]) + i += 2 + elif original_args[i] in ('--batch_num', '--batch_tot', '--batch_size', '--parallel_jobs'): + i += 2 + elif original_args[i] in ('-n', '--dry_run'): + if original_args[i] in (0, 1): + cmd.extend(["-n", original_args[i]]) + i += 2 + else: + cmd.append(original_args[i]) + i += 1 + + return cmd + + +def process_single_tile(args_tuple): + """ + Process a single tile (designed for multiprocessing). + + Args: + args_tuple: Tuple of (tile_id, tile_num, total_tiles, original_args, dry_run, msg_batch) + + Returns: + tuple: (tile_id, success, error_message) + """ + tile_id, tile_num, total_tiles, original_args, dry_run, msg_batch = args_tuple + + print(f"{'='*5} Processing {msg_batch}tile num/total={tile_num}/{total_tiles}: ID={tile_id} {'='*5}") + + # Build command + cmd = build_process_command(tile_id, original_args) + print(f"Command: {' '.join(cmd)}") + + # Execute command + try: + if dry_run != 2: + result = subprocess.run(cmd, check=True, capture_output=True, text=True) + print(f"✓ Successfully processed tile {tile_id}") + return (tile_id, True, None) + else: + print(f"dry_run=2") + return (tile_id, True, None) + except subprocess.CalledProcessError as e: + error_msg = f"Failed to process tile {tile_id}: {e}" + print(f"✗ {error_msg}", file=sys.stderr) + return (tile_id, False, error_msg) + except Exception as e: + error_msg = f"Unexpected error processing tile {tile_id}: {e}" + print(f"✗ {error_msg}", file=sys.stderr) + return (tile_id, False, error_msg) + + +def print_debug(pat, tile_list, out_path, verbose=False): + + local_replica_id = int(os.environ.get('REPLICA_ID', 1)) + + with open(out_path, "a") as f: + # Exclusive lock for save parallel use + fcntl.flock(f.fileno(), fcntl.LOCK_EX) + try: + # Build output string + output = f"{pat} distribute_tiles REPLICA_ID={local_replica_id}, tiles=" + output += " ".join(tile_list) + "\n" + + # Write to file + f.write(output) + + # Optionally write to stdout + if verbose: + print(output, end="") + finally: + # Unlock + fcntl.flock(f.fileno(), fcntl.LOCK_UN) + + +def main(): + + # Debug file line pattern + pat = "- " + + # Parse arguments + args = parse_arguments(sys.argv[1:]) + + if not "file_ids" in args: + print("Error: -f must be provided", file=sys.stderr) + sys.exit(1) + else: + file_ids = args["file_ids"] + + # Read all tiles + print(f"Reading tile list from {file_ids}") + all_tiles = get_tile_list(file_ids) + print(f"Total tiles in file: {len(all_tiles)}") + + print( + "REPLICA_ID, REPLICA_COUNT=", + os.environ.get('REPLICA_ID'), + os.environ.get('REPLICA_COUNT') + ) + + + # Check if we're in multi-batch mode + if "batch_num" in args and "batch_tot" in args and "batch_size" in args: + # Multi-batch mode: calculate global distribution + my_tile_list = get_my_tiles( + all_tiles, + args['batch_num'], + args['batch_tot'], + args['batch_size'] + ) + msg_batch = f"batch {args['batch_num']}/{args['batch_tot']} " + + else: + # Use chunk() to get tiles for this replica + print("Using chunk() to determine tiles for this replica...") + my_tile_list = list(chunk(all_tiles)) + msg_batch = "" + + if "debug_out" in args: + print_debug(f"{pat}{msg_batch}", my_tile_list, args["debug_out"], verbose=True) + + print(f"This replica assigned {len(my_tile_list)} tiles") + print(f"Parallel jobs: {args['parallel_jobs']}") + + if len(my_tile_list) > 0: + print(f"First tile: {my_tile_list[0]}") + if len(my_tile_list) > 1: + print(f"Last tile: {my_tile_list[-1]}") + else: + print("Only one tile") + + # Process each tile assigned to this replica + success_count = 0 + failure_count = 0 + + # Prepare arguments for parallel processing + process_args = [ + (tile_id, i, len(my_tile_list), sys.argv[1:], args["dry_run"], msg_batch) + for i, tile_id in enumerate(my_tile_list, 1) + ] + + if args['parallel_jobs'] > 1: + # Parallel processing + print(f"Processing tiles in parallel with {args['parallel_jobs']} workers") + with Pool(processes=args['parallel_jobs']) as pool: + results = pool.map(process_single_tile, process_args) + else: + # Sequential processing (original behavior) + print("Processing tiles sequentially") + results = [process_single_tile(arg) for arg in process_args] + + # Count successes and failures + for tile_id, success, error_msg in results: + if success: + success_count += 1 + else: + failure_count += 1 + + # Summary + print( + f"{'='*5} Processing completed tot/suc/fail=" + + f"{len(my_tile_list)}/{success_count}/{failure_count}" + ) + + # Exit with error if any failures + if failure_count > 0: + sys.exit(1) + + +if __name__ == '__main__': + main() diff --git a/scripts/python/get_ccds_with_psf.py b/scripts/python/get_ccds_with_psf.py old mode 100644 new mode 100755 index 5f917ad0..e284e264 --- a/scripts/python/get_ccds_with_psf.py +++ b/scripts/python/get_ccds_with_psf.py @@ -9,192 +9,50 @@ """ - import sys -import numpy as np - -from shapepipe.utilities import summary - - -def get_lines(fname): - """Get Lines. - - Return list of lines read from a text file. - - Parameters - ---------- - fname: str - input file name - Returns: - list - IDs +from shapepipe.utilities.ccd_psf_handler import CcdPsfHandler - """ - IDs = [] - with open(fname) as f: - lines = f.readlines() - for line in lines: - IDs.append(line.rstrip()) - - return IDs +def run_ccd_psf_handler(args=None): + """Run CCD PSF Handler. -def get_exp_shdu_missing(patches): - """Get Exp Shdu Missing. - - Returns set of missing CCDs (single-exposure single-HDU IDs) from a list of patches. + Create instance and run the CCD PSF handler. Parameters ---------- - patches: list - input patches + args : list, optional + command line arguments Returns ------- - set - missing CCD IDs + int + exit code """ - exp_shdu_missing_all = set() - - for patch in patches: - - path_exp_shdu_missing = f"{patch}/summary/missing_job_32_all.txt" - exp_shdu_missing = get_lines(path_exp_shdu_missing) - - print(f"Patch {patch}: Found {len(exp_shdu_missing)} missing ccds", end="; ") - - exp_shdu_missing_all.update(exp_shdu_missing) - - print(f"cumulative {len(exp_shdu_missing_all)} missing ccds") - - print() - - return exp_shdu_missing_all - - -def get_exp(patches): - """Get Exp. - - Return set of exposures from a list of patches. - - Parameters - ---------- - patches: list - input patches - - Returns - ------- - set - exposure IDs - - """ - exp_all = set() - - for patch in patches: - - path_exp = f"{patch}/exp_numbers.txt" - exp = get_lines(path_exp) - - print(f"Patch {patch}: Found {len(exp)} exposures", end="; ") - - exp_all.update(exp) - - print(f"cumulative {len(exp_all)} exposures") + # Create instance + obj = CcdPsfHandler() - print() + return obj.run(args=args) - return exp_all +def main(argv=None): + """Main. -def get_ccds_with_psf(patches, n_CCD=40): - """Get CCDs With PSF. - - Return set of CCDs from list of patches. + Main program. Parameters ---------- - patches: list - input patches + argv : list, optional + command line arguments Returns ------- - set - CCD IDs + int + exit code """ - # Get missing CCDs - print("=== get missing CCDs ===") - exp_shdu_missing_all = get_exp_shdu_missing(patches) - - # Get all exposures used in tiles - print("=== get exposures ===") - exp_all = get_exp(patches) - - # Turn exposures into exposure-single-HDU names (CCDs) - exp_shdu_all = summary.get_all_shdus(exp_all, n_CCD) - - print(f"Found {len(exp_shdu_all)} CCDs") - - return exp_shdu_all - - -def get_ccds_with_psf_method_2(patches, n_CCD=40): - - for patch in patches: - directory = f"{patch}/exp_runs" - - for entry in os.scandir(directory): - pass - -def save(IDs, path): - """Save. - - Save list of IDs to text file. - - Parameters - ---------- - IDs: set - input IDs - - path: str - output file name - - """ - with open(path, "w") as f_out: - for ID in IDs: - print(ID, file=f_out) - -def main(argv): - """Main. - - Main program. - - """ - version = "v1.5" - - if version == "v1.4": - n_patch = 7 - elif version == "v1.5": - n_patch = 8 - else: - raise ValueError(f"Invalid version {version}") - - patches = [f'P{x}' for x in np.arange(n_patch) + 1] - - print(f"=== get_ccds_with_psf for version {version}, patches {patches} ===") - - print("=== method 1: exp_list - missing === ") - exp_shdu_all = get_ccds_with_psf(patches) - - save(exp_shdu_all, f"ccds_with_psf_{version}.txt") - - #print("=== method 2: star cats === ") - #exp_shdu_all_method_2 = get_ccds_with_psf_method_2(patches) - #save(exp_shdu_all_method_2, f"ccds_with_psf_{version}_method_2.txt") - - return 0 + return run_ccd_psf_handler(args=argv) if __name__ == "__main__": diff --git a/scripts/python/update_runs_log_file.py b/scripts/python/update_runs_log_file.py index 6cd1fde6..debbe9c8 100644 --- a/scripts/python/update_runs_log_file.py +++ b/scripts/python/update_runs_log_file.py @@ -26,7 +26,7 @@ def matching_subdirs(base_dir, pattern, tail=False): path = tail # Remove postfix in case of multiple runs of same module - path = re.sub("_run_.\d?", "", path) + path = re.sub(r"_run_.\d?", "", path) # Append to result subdirs.append(path) diff --git a/scripts/sh/canfar_async_job.sh b/scripts/sh/canfar_async_job.sh new file mode 100755 index 00000000..7128e773 --- /dev/null +++ b/scripts/sh/canfar_async_job.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +source $HOME/shapepipe/scripts/sh/functions.sh + + +# 1. Extract the line from -f file +# Save original arguments +ARGS=("$@") + +# Find -f argument and get its value; remove -f and -S +FILE_IDS="" +NEW_ARGS=() +i=0 +while [[ $i -lt $# ]]; do + arg="${ARGS[i]}" + case "$arg" in + -f) + ((i++)) + FILE_IDS="${ARGS[i]}" + ;; + -S) + ((i++)) # skip next argument (value of -S) + ;; + *) + NEW_ARGS+=("$arg") + ;; + esac + ((i++)) +done + +if [[ -z "$FILE_IDS" ]]; then + echo "Error: -f must be provided" + exit 1 +fi + +# Get the line for this replica +LINE=$(get_line_from_file -f "$FILE_IDS") + +# 2. Call init_run.sh with remaining args + -e line +$HOME/shapepipe/scripts/sh/init_run_exclusive_canfar.sh "${NEW_ARGS[@]}" -e "$LINE" diff --git a/scripts/sh/functions.sh b/scripts/sh/functions.sh index 02f6544b..68d1f2fa 100644 --- a/scripts/sh/functions.sh +++ b/scripts/sh/functions.sh @@ -10,6 +10,49 @@ pat="---- " STOP=0 +get_line_from_file() { + local file="" + local OPTIND opt + + # Parse options: look for -f + while getopts ":f:" opt; do + case $opt in + f) + file="$OPTARG" + ;; + \?) + echo "Unknown option: -$OPTARG", ", continuing" + #return 1 + ;; + :) + echo "Option -$OPTARG requires an argument." + return 1 + ;; + esac + done + + # Check that file and REPLICA_ID are set + if [[ -z "$file" ]]; then + echo "Error: -f option not provided." + return 1 + fi + if [[ -z "$REPLICA_ID" ]]; then + echo "Error: REPLICA_ID not set." + return 1 + fi + + # Check file exists + if [[ ! -f "$file" ]]; then + echo "Error: file '$file' not found." + return 1 + fi + + # Extract the line corresponding to REPLICA_ID (1-based index) + sed -n "${REPLICA_ID}p" "$file" +} + + + # Add session and image IDs to log files function update_session_logs() { echo $my_session >> session_IDs.txt diff --git a/scripts/sh/init_run_exclusive_canfar.sh b/scripts/sh/init_run_exclusive_canfar.sh index 67f62797..cb7c9af6 100755 --- a/scripts/sh/init_run_exclusive_canfar.sh +++ b/scripts/sh/init_run_exclusive_canfar.sh @@ -17,18 +17,18 @@ sm=1 # mh_local is 0 (1) if merge_header_runner is run on all exposures, # which is standard so far (run on exposures of given tile only; new) -mh_local=0 +mh_local=1 # sp_local is 0 (1) is split_headers_runner and mask_runner is run # on all exposures (locally). Not 100% automatic yet. -sp_local=0 +sp_local=1 VERBOSE=1 pat="-- " ## Help string -usage="Usage: $(basename "$0") -j JOB -e ID -k KIND [OPTIONS] +usage="Usage: $(basename "$0") -j JOB -e ID [OPTIONS] \n\nOptions:\n -h\tthis message\n -j, --job JOB\tRUnning JOB, bit-coded\n @@ -39,7 +39,7 @@ usage="Usage: $(basename "$0") -j JOB -e ID -k KIND [OPTIONS] -m, --mh_local MH\n \tmerge header file local (MH=1) or global (MH=0); default is $mh_local\n -s, --sp_local SP\n - \tsplit local run local (SP=1) or global (SP=r0wwdefault is $sp_local\n + \tsplit local run local (SP=1) or global (SP=0); default is $sp_local\n --sm SM\n \tWith (SM=1; default) or without (SM=0) spread model input\n -N, --N_SMP N_SMOp\n @@ -49,13 +49,13 @@ usage="Usage: $(basename "$0") -j JOB -e ID -k KIND [OPTIONS] -S, --scratch\n \tprocessing scratch directory, default is None ($scratch)\n -F, --fix FIX\n - \tfix missing data (re-download tile, unzip) for FIX=1; default is $FIX\n + \tfix missing data (re-download tile, unzip) for FIX=1; default is $fix\n -n, --dry_run LEVEL\n \tdry run (LEVEL=1), no actual processing; default is $dry_run\n --debug_out PATH\n \tdebug output file PATH, default not used\n --test\n - \ttest mode, no processind\n + \ttest mode, no processing\n " ## Help if no arguments @@ -148,6 +148,7 @@ function message() { # Init message message "test=$test_only" $debug_out -1 if [ "$test_only" == "1" ]; then + echo "MKDEBUG test" msg="init_run_exclusive.py script test mode, exiting." ex=0 else @@ -189,10 +190,10 @@ fi source $HOME/shapepipe/scripts/sh/functions.sh -msg="Starting $(basename "$0")" +msg="Starting $(basename "$0") `date` ID=$ID" message "$msg" $debug_out -1 -message "`date`" $debug_out -1 -message "ID=$ID" $debug_out -1 +#message "`date`" $debug_out -1 +#message "ID=$ID" $debug_out -1 # Set kind kind=$(get_kind_from_job $job) @@ -353,11 +354,7 @@ fi (( do_job = $job & 2 )) if [ $do_job != 0 ] && [ "$sp_local" == "1" ]; then -#if [ ! -e "run_exp_Sp_shdu" ] && [ "$sp_local" == "1" ]; then - # run local Sp if not done already; works only with mh_local=1; this step needs to be done - # before following mh_local=1 steps message "run local sp" $debug_out -1 - #command "rm -rf run_sp_GitFeGie*/get_images_runner_run_2" $dry_run command "rm -rf run_sp_Gie*" $dry_run command "rm -rf run_sp_exp_Sp*" $dry_run @@ -404,16 +401,18 @@ if [ $do_job != 0 ] && [ "$sp_local" == "1" ]; then cd output if [ "$job" == "2" ]; then - exit 0 + msg="Finishing $(basename "$0") after job=2 `date` ID=$ID" + message "$msg" $debug_out 0 fi fi if [ "$kind" == "tile" ] && [ "$sp_local" == "1" ]; then + echo "New (for P9): skipping link_to_exp_for_tile.py" cd ../../.. - command "link_to_exp_for_tile.py -t $ID -i tile_runs -I exp_runs -s $sp_local" $dry_run + #command "link_to_exp_for_tile.py -t $ID -i tile_runs -I exp_runs -s $sp_local" $dry_run cd tile_runs/$ID - command "combine_runs.bash -p psfex -c shdu" $dry_run + #command "combine_runs.bash -p psfex -c shdu" $dry_run cd output fi @@ -486,18 +485,6 @@ fi (( do_job = $job & 64 )) if [[ $do_job != 0 ]]; then if [ "$kind" == "tile" ]; then - cd ../../.. - command "link_to_exp_for_tile.py -t $ID -i tile_runs -I exp_runs -s $sp_local" $dry_run - cd ${kind}_runs/$ID/output - - # Remove duplicate job-16 runs (tile detection) - # New (P8) commented - #n_16=`ls -rt1d run_sp_tile_Sx_* | wc -l` - #if [ "$n_16" != "1" ]; then - #n_remove="$(($n_16-1))" - #echo "removing $n_remove duplicate old job-16 runs" - #command "rm -rf `ls -rt1d run_sp_tile_Sx_* | head -$n_remove`" $dry_run - #fi # Remove previous runs of this job rm -rf run_sp_tile_PsViSmVi* @@ -513,6 +500,16 @@ if [[ $do_job != 0 ]]; then dir_ngmix_prev="run_sp_tile_ngmix_Ng1u_prev/ngmix_runner/output" cat_ngmix_prev="$dir_ngmix_prev/ngmix-*.fits" + # Remove if empty + if [ ! -s $cat_ngmix ]; then + echo "Removing empty file $cat_ngmix" + rm $cat_ngmix + fi + if [ ! -s $cat_ngmix_prev ]; then + echo "Removing empty file $cat_ngmix_prev" + rm $cat_ngmix_prev + fi + # Check whether ngmix output exists if [ -e $cat_ngmix ]; then message "ngmix output catalogue exists" $debug_out -1 @@ -552,7 +549,7 @@ fi if [[ $do_job != 0 ]]; then # Remove previous runs of this job - rm -rf run_sp_Ms_20??_* + rm -rf run_sp_Ms_20??-* fi @@ -560,7 +557,7 @@ fi if [[ $do_job != 0 ]]; then # Remove previous runs of this job - rm -rf run_sp_Mc_20??_* + rm -rf run_sp_Mc_20??-* fi @@ -614,8 +611,7 @@ fi cd $dir -msg="End $(basename "$0")" -echo $msg -if [ "$debug_out" != "-1" ]; then - echo $pat$msg >> $debug_out- -fi +#msg="End $(basename "$0")" + +msg="Finished $(basename "$0") `date` ID=$ID" +message "$msg" $debug_out -1 diff --git a/scripts/sh/remove_duplicates_tiles.sh b/scripts/sh/remove_duplicates_tiles.sh old mode 100644 new mode 100755 index 2c774823..6f789fe6 --- a/scripts/sh/remove_duplicates_tiles.sh +++ b/scripts/sh/remove_duplicates_tiles.sh @@ -1,16 +1,55 @@ #!/usr/bin/env bash +# Script to remove duplicate tile runs, keeping only the newest +# Run from directory containing P?/tile_runs subdirectories + count=0 -for dir in tile_runs/*; do - if compgen -G "$dir/output//run_sp_tile_PsViSmVi*" > /dev/null; then - n=`ls -rdtl $dir/output/run_sp_tile_PsViSmVi* | wc -l` - if [ "$n" != "2" ]; then - ((n_remove=n-1)) - echo $dir $n $n_remove - rm -rf `ls -rdt1 $dir/output/run_sp_tile_PsViSmVi* | head -n $n_remove` - (count=(count+1)) - fi +total_removed=0 + +echo "Starting duplicate tile run removal..." +echo "Looking for patches in P?/tile_runs structure..." +echo "" + +# Process each patch directory +for patch_dir in P*/tile_runs; do + if [ ! -d "$patch_dir" ]; then + continue fi + + patch_name=$(dirname "$patch_dir") + echo "Processing patch: $patch_name" + + # Process each tile directory within the patch + for dir in "$patch_dir"/*; do + if [ ! -d "$dir" ]; then + continue + fi + + # Check each of the three run types + for run_type in run_sp_tile_PsViSmVi run_sp_tile_Mc run_sp_tile_Ms; do + if compgen -G "$dir/output/${run_type}*" > /dev/null; then + n=$(ls -dt "$dir/output/${run_type}"* 2>/dev/null | wc -l) + if [ "$n" -gt 1 ]; then + ((n_remove=n-1)) + echo " Found $n copies of $run_type in $(basename "$dir"), removing $n_remove oldest" + + # Remove all but the newest + ls -dt "$dir/output/${run_type}"* | tail -n "$n_remove" | while read old_run; do + echo " Removing: $(basename "$old_run")" + rm -rf "$old_run" + ((total_removed++)) + done + + ((count++)) + fi + fi + done + done + echo "" done -echo $count +echo "========================================" +echo "Summary:" +echo " Processed tile directories: $count" +echo " Total run directories removed: $total_removed" +echo "========================================" diff --git a/src/shapepipe/canfar/canfar_log_monitor.py b/src/shapepipe/canfar/canfar_log_monitor.py new file mode 100644 index 00000000..ee6fe5db --- /dev/null +++ b/src/shapepipe/canfar/canfar_log_monitor.py @@ -0,0 +1,251 @@ +# canfar_log_monitor.py + +# Monitor CANFAR job logs and save non-empty outputs + +import os +import sys +import time +import subprocess +from datetime import datetime +from pathlib import Path + +from canfar.sessions import Session + +from cs_util import args as cs_args +from cs_util import logging + + +class LogMonitor: + """Monitor CANFAR job logs continuously.""" + + def __init__(self): + self.params_default() + self._tracked_jobs = {} # Track which jobs we've seen + + def params_default(self): + """Set default parameters.""" + self._params = { + "status": "Running", + "interval": 180, + "output_dir": "canfar_logs", + "kind": "headless", + "verbose": False, + } + + self._short_options = { + "status": "-s", + "interval": "-i", + "output_dir": "-o", + "kind": "-k", + } + + self._types = { + "interval": "int", + } + + self._help_strings = { + "status": "job status to monitor (Running, Completed, or both); default is {}", + "interval": "polling interval in seconds; default is {}", + "output_dir": "directory to save log files; default is {}", + "kind": "session kind (headless, notebook, etc.); default is {}", + } + + def set_params_from_command_line(self, args): + """Set parameters from command line.""" + options = cs_args.parse_options( + self._params, + self._short_options, + self._types, + self._help_strings, + ) + self._params = options + + # Save calling command + logging.log_command(args) + + def get_job_ids(self): + """Fetch job IDs based on status filter.""" + session = Session() + + kind = self._params["kind"] if self._params["kind"] != "all" else None + + try: + info = session.fetch(kind=kind) + except Exception as e: + print(f"Error fetching sessions: {e}") + return [] + + if not info: + return [] + + # Filter by status + status_filter = self._params["status"] + job_ids = [] + + for job in info: + job_status = job.get("status", "") + job_id = job.get("id", "") + job_name = job.get("name", "") + + # Handle "both" or comma-separated statuses + if status_filter.lower() == "both": + if job_status in ["Running", "Completed"]: + job_ids.append((job_id, job_name, job_status)) + elif "," in status_filter: + statuses = [s.strip() for s in status_filter.split(",")] + if job_status in statuses: + job_ids.append((job_id, job_name, job_status)) + else: + if job_status == status_filter: + job_ids.append((job_id, job_name, job_status)) + + return job_ids + + def fetch_logs(self, job_id): + """Fetch logs for a specific job ID using canfar logs command.""" + try: + result = subprocess.run( + ["canfar", "logs", job_id], + capture_output=True, + text=True, + timeout=30, + ) + return result.stdout + except subprocess.TimeoutExpired: + print(f" Timeout fetching logs for {job_id}") + return None + except Exception as e: + if self._params["verbose"]: + print(f" Error fetching logs for {job_id}: {e}") + return None + + def is_log_empty(self, log_content): + """Check if log content is just the header (3 lines with no real content).""" + if not log_content: + return True + + lines = log_content.strip().split('\n') + + # If only 3 or fewer lines, and they're mostly empty, consider it empty + if len(lines) <= 3: + non_empty_lines = [line for line in lines if line.strip() and "Logs for session" not in line] + return len(non_empty_lines) == 0 + + return False + + def save_log(self, job_id, job_name, log_content, job_status=None): + """Save log content to a file.""" + output_dir = Path(self._params["output_dir"]) + output_dir.mkdir(parents=True, exist_ok=True) + + # Use job name if available, otherwise use ID + filename = f"{job_name}_{job_id}.log" if job_name else f"{job_id}.log" + filepath = output_dir / filename + + timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + + with open(filepath, 'w') as f: + f.write(f"# Captured at {timestamp}\n") + f.write(f"# Job ID: {job_id}\n") + f.write(f"# Job Name: {job_name}\n\n") + f.write(log_content) + + # Add status line if job is completed + if job_status == "Completed": + # Ensure there's a newline before the status line + if not log_content.endswith('\n'): + f.write('\n') + f.write('status=Completed\n') + return filepath + + def monitor_loop(self): + """Main monitoring loop.""" + print(f"Starting CANFAR log monitor...") + print(f" Status filter: {self._params['status']}") + print(f" Polling interval: {self._params['interval']} seconds") + print(f" Output directory: {self._params['output_dir']}") + print(f" Kind: {self._params['kind']}") + print() + + iteration = 0 + + try: + while True: + iteration += 1 + timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + print(f"[{timestamp}] Poll #{iteration}") + + # Get current job IDs + job_ids = self.get_job_ids() + + if not job_ids: + print(f" No jobs found with status '{self._params['status']}'") + else: + print(f" Found {len(job_ids)} job(s)") + + for job_id, job_name, job_status in job_ids: + print(f" Checking {job_id} ({job_name}, {job_status})...", end=" ", flush=True) + + # Fetch logs + log_content = self.fetch_logs(job_id) + + if log_content is None: + print("failed to fetch") + continue + + # Check if logs have content + if self.is_log_empty(log_content): + print("empty") + # Track that we've seen this job + if job_id not in self._tracked_jobs: + self._tracked_jobs[job_id] = {"name": job_name, "has_logs": False, "num_lines": 0} + else: + # Count number of lines in current log + current_num_lines = len(log_content.strip().split('\n')) + + # Get previous number of lines + if job_id in self._tracked_jobs: + previous_num_lines = self._tracked_jobs[job_id].get("num_lines", 0) + else: + previous_num_lines = 0 + + # Only save if there's new content + if current_num_lines > previous_num_lines: + print(f"has content! ({current_num_lines} lines, +{current_num_lines - previous_num_lines})", end=" ") + + # Save the logs + filepath = self.save_log(job_id, job_name, log_content) + print(f"saved to {filepath}") + + # Update tracking + self._tracked_jobs[job_id] = { + "name": job_name, + "has_logs": True, + "num_lines": current_num_lines + } + else: + print(f"no new content ({current_num_lines} lines)") + # Update tracking even if no new content + if job_id not in self._tracked_jobs: + self._tracked_jobs[job_id] = { + "name": job_name, + "has_logs": True, + "num_lines": current_num_lines + } + + print() + time.sleep(self._params['interval']) + + except KeyboardInterrupt: + print("\n\nMonitoring stopped by user") + print(f"Total jobs tracked: {len(self._tracked_jobs)}") + jobs_with_logs = sum(1 for j in self._tracked_jobs.values() if j["has_logs"]) + print(f"Jobs with logs saved: {jobs_with_logs}") + + def run(self, args=None): + """Main entry point.""" + if args is None: + args = sys.argv + + self.set_params_from_command_line(args) + self.monitor_loop() diff --git a/src/shapepipe/canfar/canfar_monitor.py b/src/shapepipe/canfar/canfar_monitor.py new file mode 100644 index 00000000..5edc9e7a --- /dev/null +++ b/src/shapepipe/canfar/canfar_monitor.py @@ -0,0 +1,282 @@ +# canfar_monitor.py + +# Montiot job submitted with the canfar client + +import os +import sys + +from requests.exceptions import ReadTimeout +from httpx import HTTPStatusError +from pydantic import ValidationError +from canfar.sessions import Session + +import pandas as pd + +from cs_util import args as cs_args +from cs_util import logging + + +class Log(object): + + def __init__(self): + + self.params_default() + + def set_params_from_command_line(self, args): + """Set Params From Command line. + + Only use when calling using python from command line. + Does not work from ipython or jupyter. + + """ + # Read command line options + options = cs_args.parse_options( + self._params, + self._short_options, + self._types, + self._help_strings, + ) + self._params = options + + # Save calling command + logging.log_command(args) + + def params_default(self): + + self._params = { + "kind": "headless", + "status": "all", + "destroy": False, + "bulk": 1, + "quiet": False, + } + + self._short_options = { + "kind": "-k", + "status": "-s", + "destroy": "-d", + "bulk": "-b", + "quiet": "-q", + } + + self._types = { + "destroy": "bool", + "bulk": "int", + "quiet": "bool", + } + + self._help_strings = { + "kind": "session kind, allowed are all, headless, notebook, ...; default is {}", + "status": "procesing status, allowed are Pending, Running, Completed, all; default is {}", + "destroy": "if True, destroy all displayed jobs; default is {}", + "bulk": "destroy mode, allowed are 2, 1, 0; default is {}", + "quiet": "quiet output", + } + + def update_params(self): + """Update Params. + + Update parameters. + """ + pass + + def check_params(self): + pass + + def print_info(self, df): + + if not self._params["quiet"]: + # Prepare header and rows with left-justified formatting + header = f"{'type':<10} {'status':<10} {'date':<12} {'time':<10} {'name':<20} {'id':<10}" + print("=" * len(header)) + print(header) + print("=" * len(header)) + + for _, row in df.iterrows(): + print(f"{row['type']:<10} {row['status']:<10} {row['date']:<12} {row['time']:<10} {row['name']:<20} {row['id']:<10}") + + print("=" * len(header)) + + print(f"{len(df)} jobs found") + + def filter(self): + + df = pd.DataFrame(self._info) + + if len(self._info) == 0: + return df + + # Extract clean date/time + try: + # Remove 'T' and 'Z' to make it a proper datetime string + dt_series = ( + df['startTime'] + .str.replace('T', ' ', regex=False) + .str.replace('Z', '', regex=False) + ) + # Extract date and time separately + df['date'] = dt_series.str.split(' ').str[0] + df['time'] = dt_series.str.split(' ').str[1] + except KeyError: + if self._params["verbose"]: + print( + f"Column 'startTime' not found among {df.columns.tolist()}," + + f" setting dummy columns for date and time." + ) + df['date'] = '1975-12-06' + df['time'] = '12:04:00' + except Exception as e: + estr = f": {e}" if self._params["verbose"] else "" + raise RunTimeError( + f"An error occurred while processing dates: {estr}" + ) from e + + # Select columns of interest + cols = ['type', 'status', 'date', 'time', 'name', 'id'] + for col in cols: + if not col in df: + raise IndexError(f"Column {col} not in job info, which contains {df.columns.tolist()}") + df = df[['type', 'status', 'date', 'time', 'name', 'id']] + + # Get input status or None if missing + status_filter = self._params.get("status", None) + + # If not None and not "all": filter + if status_filter and status_filter != "all": + df = df[df["status"] == status_filter] + + return df + + def run(self, args=None): + + if args is None: + args = sys.argv + + obj = self + + obj.set_params_from_command_line(args) + obj.update_params() + obj.check_params() + + session = self.get_session() + + df_filtered = self.filter() + + self.print_info(df_filtered) + + if self._params["destroy"]: + self.destroy(df_filtered, session) + + def get_kind(self): + """Get Kind. + + Return kind for communication with canfar. + In particular, returns None if kind in parametesr is "all". + + """ + return ( + self._params["kind"] + if self._params["kind"] != "all" + else None + ) + + def destroy(self, df, session): + + bulk = self._params["bulk"] + + if bulk == 2: + kind = self._get_kind() + + if self._params["status"] != "all": + status = self._params["status"] + else: + status = None + + try: + print("Bulk destroy") + result = session.destroy_with( + prefix="sp-", + kind=kind, + status=status, + ) + except Exception as e: + if self._params.get("verbose"): + print(f"Failed to destroy jobs: {e}") + else: + print("Failed to destroy jobs") + # Optionally exit or return gracefully + return False + + print("Success") + return + + elif bulk == 1: + # Recommended + ids = df['id'].tolist() + try: + print("List destroy") + result = session.destroy(ids) + print(f"{len(ids)} sessions done") + except Exception as e: + estr = f": {e}" if self._params["verbose"] else "" + print("failed{estr}") + + else: + print("Loop destroy") + for _, row in df.iterrows(): + session_id = row["id"] + name = row.get("name", "") + print(f"Destroying {session_id} {name}", end=" ", flush=True) + try: + result = session.destroy(session_id) + print(f"{result[session_id]} done") + except Exception as e: + estr = f": {e}" if self._params["verbose"] else "" + print("failed{estr}") + + + def get_session(self): + + # Initialize session manager + session = Session() + + # Fetch information + try: + if not self._params["quiet"]: + print( + f"Retreiving session info of kind={self._params['kind']}," + + f" status={self._params['status']}" + ) + kind = self.get_kind() + self._info = session.fetch(kind=kind) + if len(self._info) == 0: + print("No session fetched") + return [] + except ReadTimeout as e: + estr = f": {e}" if self._params["verbose"] else "" + raise ReadTimeout( + f"ReadTimeout occurred while fetching session info{estr}" + ) from e + except ValidationError as e: + estr = f": {e}" if self._params["verbose"] else "" + raise ValueError( + f"Validation error occurred; incorrect kind{estr}" + ) from e + except HTTPStatusError as e: + estr = f": {e}" if self._params["verbose"] else "" + raise ValueError( + f"HTTPStatusError occurred while fetching session info{estr}" + ) from None + except Exception as e: + # Handle any other exceptions + print(f"An unexpected error occurred: {e}") + if self._params["verbose"]: + raise + else: + sys.exit(2) + else: + # Runs only if no exception occurred + if not self._params["quiet"]: + print(f"Successfully fetched kind '{self._params['kind']}'") + + return session diff --git a/src/shapepipe/canfar/canfar_submit.py b/src/shapepipe/canfar/canfar_submit.py new file mode 100644 index 00000000..7c0bb5be --- /dev/null +++ b/src/shapepipe/canfar/canfar_submit.py @@ -0,0 +1,461 @@ +# canfar_submit_job.py + +# Submit job with the canfar client + +import os +import sys +import asyncio +import math + +from canfar.sessions import Session +from canfar.sessions import AsyncSession +from datetime import datetime + +from cs_util import args as cs_args +from cs_util import logging + + +class Job(object): + + def __init__(self): + + self.params_default() + + self._patch = os.environ["patch"] if "patch" in os.environ else "P0" + + # Set job parameters + version = "1.1" + self._image = f"images.canfar.net/unions/shapepipe:{version}" + + # Maximum replicas per batch (CANFAR limit is 512) + self._max_replicas_per_batch = 512 + if self._max_replicas_per_batch != 512: + print(f"Setting the maximum number of replicas to the non-standard {self._max_replicas_per_batch}") + + # Default number of cores, can be overwritten by -c or -P (parallel jobs) options + self._cores_default = 2 + + + def set_params_from_command_line(self, args): + """Set Params From Command line. + + Only use when calling using python from command line. + Does not work from ipython or jupyter. + + """ + # Read command line options + options = cs_args.parse_options( + self._params, + self._short_options, + self._types, + self._help_strings, + ) + self._params = options + + # Save calling command + logging.log_command(args) + + def params_default(self): + + self._params = { + "job": -1, + "exclusive": None, + "file_IDs": None, + "psf": "psfex", + "n": "0", + "debug_out": None, + "dry_run": 0, + "log": "log_jobs.txt", + "sync": "async", + "cores": 2, + "ram": 4, + "parallel_jobs": 1, + "jobs_per_session": 0, + "stats": False, + } + + self._short_options = { + "job": "-j", + "exclusive": "-e", + "file_IDs": "-f", + "psf": "-p", + "dry_run": "-n", + "log": "-l", + "sync": "-S", + "cores": "-c", + "ram": "-r", + "parallel_jobs": "-P", + "jobs_per_session": "-J", + "stats": "-s", + } + + self._types = { + "job": "int", + "cores": "int", + "ram": "int", + "parallel_jobs": "int", + "jobs_per_session": "int", + "stats": "bool", + } + + self._help_strings = { + "job": "Running JOB, bit-coded, default is {}", + "exclusive": "Run exclusively given image", + "file_IDs": "file containing IDs", + "psf": "PSF model, allowed are 'psfex' and 'mccd'; default is {}", + "dry_run": "if dry run > 0 no actual processing; allowed are 2, 1, 0; default is {}", + "debug_out": "debug output file path, default:set automatically", + "log": "output log file with job and tile IDs", + "sync": "job submission mode, allowed are async, sync; default is {}", + "cores": "number of CPU cores per replica; default is {} or overwritten by -P", + "ram": "RAM in GB per replica; default is {}", + "parallel_jobs": "number of tiles to process in parallel per replica; default is {}", + "jobs_per_session": ( + "number of jobs (tiles) per session; if 0, create one session per job (default is {});" + + " Number of replicas is #FILE_IDs / JOBS_PER_SESSSION" + ), + "stats": "print stats of sessions/batches/replicas and exit", + } + + def update_params(self): + """Update Params. + + Update parameters. + """ + + # If not given, set number of cores to number of parallel jobs; + # else set to default. + if self._params["cores"] == -1: + if self._params["parallel_jobs"] != 1: + self._params["cores"] = self._params["parallel_jobs"] + else: + self._params["cores"] = self._cores_default + pass + + def check_params(self): + + if self._params["job"] == -1: + raise ValueError(f"need to specify job (option -j)") + + if self._params["sync"] == "async" and not self._params["file_IDs"]: + raise ValueError("asynchronous mode only possible when tile_IDs file given (-f)") + + if not self._params["exclusive"] and not self._params["file_IDs"]: + raise ValueError("No image ID(s) indicated, use option -e ID or -f file_IDs") + + def set_options_base(self): + + opt = {} + + cwd = os.getcwd() + + # asynchronous mode + if self._params["sync"] == "async": + opt["-f"] = f"-f {cwd}/{self._params['file_IDs']}" + + # Options + opt["j"] = f"-j {self._params['job']}" + opt["p"] = f"-p {self._params['psf']}" + + # Set identifier for debug file name + if self._params["exclusive"]: + deb_ID = self._params["exclusive"] + else: + deb_ID = os.path.basename(self._params["file_IDs"]) + + if self._params['debug_out']: + opt["debut_out"] = f"--debug_out {cwd}/debug/{self._params['debug_out']}" + else: + opt["debut_out"] = f"--debug_out {cwd}/debug/debug_{deb_ID}.txt" + + opt["d"] = f"-d {cwd}" + opt["m_s"] = "-m 1 -s 1" if self._patch in ("P8", "P9") else "" + if self._params["dry_run"] != 0: + opt["n"] = f"-n {self._params['dry_run']}" + if self._params["parallel_jobs"] > 1: + opt["P"] = f"--parallel_jobs {self._params['parallel_jobs']}" + + options = "" + for key in opt: + options = f"{options} {opt[key]}" + + self._options_base = options + + def set_job_name(self, suf=None): + + if suf is None: + suf = self._params["exclusive"] + + suf1 = suf.replace(".", "-") + + job_name = f"sp-{self._patch}-j{self._params['job']}-{suf1}" + + return job_name + + def set_command(self, mode): + + if mode == "async_single": + self._cmd = f"{os.environ['HOME']}/shapepipe/scripts/sh/canfar_async_job.sh" + elif mode == "async_bulk": + self._cmd = f"{os.environ['HOME']}/shapepipe/scripts/python/distribute_tiles.py" + elif mode == "sync": + self._cmd = f"{os.environ['HOME']}/shapepipe/scripts/sh/init_run_exclusive_canfar.sh" + + def get_tile_IDs(self): + + if self._params["exclusive"]: + tile_IDs = [self._params["exclusive"]] + suf = None + else: + with open(self._params["file_IDs"], "r") as f: + tile_IDs = [line.strip() for line in f] + suf = "" + + return tile_IDs, len(tile_IDs), suf + + async def run_async(self): + async with AsyncSession() as session: + + _, total_n, suf = self.get_tile_IDs() + + # Calculate number of replicas (sessions) based on jobs_per_session + if self._params["jobs_per_session"] > 0: + # Each replica processes multiple jobs + num_replicas = math.ceil(total_n / self._params["jobs_per_session"]) + print(f"Distributing {total_n} jobs across {num_replicas} sessions") + print(f"Each session will process ~{self._params['jobs_per_session']} jobs") + else: + # Old behavior: one replica per job + num_replicas = total_n + print(f"Creating {num_replicas} sessions (one per job)") + + # Calculate number of batches needed + num_batches = math.ceil(num_replicas / self._max_replicas_per_batch) + + if num_batches == 1: + # Submit single batch + self.set_command(mode="async_bulk") + print(f"Submitting {num_replicas} replicas in a single batch") + return await self._submit_single_batch(num_replicas, total_n) + else: + # Submit multiple batches as chunks + self.set_command(mode="async_bulk") + print(f"Splitting into {num_batches} batches (max {self._max_replicas_per_batch} replicas per batch)") + return await self._submit_multiple_batches(num_replicas, total_n, num_batches) + + + async def _submit_single_batch(self, num_replicas, total_n): + """Submit a single batch of jobs. + + Args: + num_replicas: Number of replicas (sessions) to create + total_n: Total number of jobs (tiles) to process + """ + print(f"Submitting {num_replicas} replicas to process {total_n} jobs") + + job_name = self.set_job_name(suf="") + options = self._options_base.lstrip() + print(f"Running '{self._cmd} {options}'") + + async with AsyncSession() as session: + try: + sessions = await session.create( + name=job_name, + image=self._image, + cmd=self._cmd, + args=options, + replicas=num_replicas, + cores=self._params["cores"], + ram=self._params["ram"], + ) + print(f"✓ Batch submitted successfully: {len(sessions)} sessions created") + print(f"Each session will process ~{math.ceil(total_n / num_replicas)} jobs using chunk()") + print("Sessions = ", sessions) + except Exception as e: + print(f"❌ CANFAR session.create() failed: {type(e).__name__}: {e}") + raise + + return sessions + + async def _submit_multiple_batches(self, num_replicas, total_n, num_batches): + """Submit multiple batches of jobs. + + Args: + num_replicas: Total number of replicas (sessions) to create + total_n: Total number of jobs (tiles) to process + num_batches: Number of batches to split replicas into + + Each batch creates a subset of replicas. chunk() automatically + distributes all tiles across all replicas. + """ + all_sessions = [] + + async with AsyncSession() as session: + for batch_num in range(1, num_batches + 1): + # Calculate batch size (number of replicas in this batch) + if batch_num < num_batches: + batch_size = self._max_replicas_per_batch + else: + # Last batch gets the remainder + batch_size = num_replicas - (num_batches - 1) * self._max_replicas_per_batch + + print(f"\n--- Batch {batch_num}/{num_batches} ---") + print(f"Submitting {batch_size} replicas") + print(f"Total {num_replicas} replicas will process {total_n} jobs") + print(f"chunk() will distribute jobs across all replicas") + + job_name = self.set_job_name(suf=f"b{batch_num}") + options = ( + f"{self._options_base} --batch_num {batch_num}" + + f" --batch_tot {num_batches}" + + f" --batch_size {batch_size}" + ) + options = options.lstrip() + print(f"Running '{self._cmd} {options}'") + + try: + sessions = await session.create( + name=job_name, + image=self._image, + cmd=self._cmd, + args=options, + replicas=batch_size, + cores=self._params["cores"], + ram=self._params["ram"], + + ) + print(f"✓ Batch {batch_num} submitted: {len(sessions)} sessions created") + print(sessions) + all_sessions.extend(sessions) + + # Small delay between batches to avoid overwhelming the system + if batch_num < num_batches: + await asyncio.sleep(1) + + except Exception as e: + print(f"❌ Batch {batch_num} failed: {type(e).__name__}: {e}") + # Continue with other batches even if one fails + continue + + print(f"\n=== Submission complete ===") + print(f"Total sessions created: {len(all_sessions)} replicas (for {total_n} jobs)") + print(f"Each replica will process ~{math.ceil(total_n / num_replicas)} jobs") + + return all_sessions + + def run_no_async(self): + + session = Session() + + self.set_command(mode="sync") + + tile_IDs, _, _ = self.get_tile_IDs() + + job_ids = [] + for tile_ID in tile_IDs: + + job_name = self.set_job_name(tile_ID) + + options = f"{self._options_base} -e {tile_ID}" + + # Remove leading whitespace, problem in passing args below + options = options.lstrip() + + print(f"Running '{self._cmd} {options}'") + + # Submit flexible job (default - auto-scaling) + job_id = session.create( + name=job_name, + image=self._image, + cmd=self._cmd, + args=options, + ) + + print(f"Submitted job: {job_id}") + job_ids.append(job_id) + + return job_ids + + def write_job_tile_IDs(self, job_ids): + + tile_IDs, _, _ = self.get_tile_IDs() + + cwd = os.getcwd() + log_path = f"{cwd}/{self._params['log']}" + + print(f"Writing job and tile ID log file {log_path}") + with open(log_path, "w") as log: + for job_id, tile_ID in zip(job_ids, tile_IDs): + print(job_id, tile_ID, file=log) + + def print_stats(self): + + # Total number of jobs (= length of input ID file) + _, total_n, _ = self.get_tile_IDs() + + if self._params["jobs_per_session"] == 0: + # Compute max jobs per session to fit in single batch + self._params["jobs_per_session"] = math.ceil(total_n / self._max_replicas_per_batch) + print(f"Max jobs per session (-J) = {self._params['jobs_per_session']}") + + # Number of sessions + n_session = math.ceil(total_n / self._params["jobs_per_session"]) + + # Number of batches + n_batch = math.ceil(n_session / self._max_replicas_per_batch) + + # Number of jobs per session + n_jobs = math.ceil(self._params["jobs_per_session"] / n_batch) + + n_jobs_serial = max( + math.ceil(n_jobs / self._params["parallel_jobs"]), + 1, + ) + + print( + f"Number of jobs = {total_n}\t\t(#{self._params['file_IDs']})") + print( + f"Number of sessions = {n_session:5d}\t\t({total_n} /" + + f" {self._params['jobs_per_session']})" + ) + print( + f"Number of batches = {n_batch:5d}\t\t({n_session} /" + + f" {self._max_replicas_per_batch})" + ) + print( + f"Number of jobs per session = {n_jobs:5d}" + + f"\t\t({self._params['jobs_per_session']} / {n_batch}" + ) + print( + f"Number of serial jobs = {n_jobs_serial:5d}\t\t({n_jobs}" + + f" / {self._params['parallel_jobs']})" + ) + + def run(self, args=None): + + obj = self + + if args is None: + args = sys.argv + obj.set_params_from_command_line(args) + obj.update_params() + obj.check_params() + + obj.set_options_base() + + if self._params["stats"]: + obj.print_stats() + sys.exit(0) + + # Initialize session manager + self._session = Session() + + if obj._params["sync"] == "async": + print("Async mode") + job_ids = asyncio.run(obj.run_async()) + else: + print("Sync mode") + job_ids = obj.run_no_async() + print(f"Submitting jobs: done") + + obj.write_job_tile_IDs(job_ids) diff --git a/src/shapepipe/canfar_run.py b/src/shapepipe/canfar_run.py new file mode 100644 index 00000000..f7303983 --- /dev/null +++ b/src/shapepipe/canfar_run.py @@ -0,0 +1,36 @@ +import sys +from shapepipe.canfar import canfar_submit, canfar_monitor, canfar_log_monitor + +def run_job(args=None): + + # Create instance + obj = canfar_submit.Job() + + obj.run(args=args) + + +def run_log(args=None): + + # Create instance + obj = canfar_monitor.Log() + try: + sys.exit(obj.run(args=args)) + except ValueError as e: + print(e) + sys.exit(1) + + +def run_monitor_log(args=None): + + # Create instance + obj = canfar_log_monitor.LogMonitor() + obj.run(args=args) + + +def main(argv=None): + """Main + + Main program + """ + # Scripts to call canfar classes are created by pyproject.toml + return 0 diff --git a/src/shapepipe/coverage_run.py b/src/shapepipe/coverage_run.py new file mode 100644 index 00000000..3b30ce04 --- /dev/null +++ b/src/shapepipe/coverage_run.py @@ -0,0 +1,149 @@ +"""COVERAGE_RUN + +Call coverage processing classes. + +Author: Martin Kilbinger + +""" + +import sys + +from shapepipe.utilities.header_downloader import HeaderDownloader +from shapepipe.utilities.field_corners_extractor import FieldCornersExtractor +from shapepipe.utilities.coverage_map_builder import CoverageMapBuilder +from shapepipe.utilities.coverage_plotter import CoveragePlotter + + +def run_download_headers(args=None): + """Run Download Headers. + + Download FITS headers from VOSpace for exposures in a CCD list. + + Parameters + ---------- + args : list, optional + command line arguments + + Returns + ------- + int + exit code + + """ + obj = HeaderDownloader() + return obj.run(args=args) + + +def run_extract_corners(args=None): + """Run Extract Corners. + + Extract field corner coordinates from FITS headers. + + Parameters + ---------- + args : list, optional + command line arguments + + Returns + ------- + int + exit code + + """ + obj = FieldCornersExtractor() + return obj.run(args=args) + + +def run_build_coverage(args=None): + """Run Build Coverage. + + Build HealSparse coverage maps from field corner coordinates. + + Parameters + ---------- + args : list, optional + command line arguments + + Returns + ------- + int + exit code + + """ + obj = CoverageMapBuilder() + return obj.run(args=args) + + +def run_plot_coverage(args=None): + """Run Plot Coverage. + + Plot HealSparse coverage map. + + Parameters + ---------- + args : list, optional + command line arguments + + Returns + ------- + int + exit code + + """ + obj = CoveragePlotter() + return obj.run(args=args) + + +def run_pipeline(args=None): + """Run Pipeline. + + Run the complete coverage map pipeline: + 1. Download FITS headers + 2. Extract field corners + 3. Build coverage map + + Parameters + ---------- + args : list, optional + command line arguments + + Returns + ------- + int + exit code + + """ + print("Step 1: Downloading FITS headers") + ret = run_download_headers(args) + if ret != 0: + print("Failed to download headers") + return ret + + print() + print("Step 2: Extracting field corners") + ret = run_extract_corners(args) + if ret != 0: + print("Failed to extract field corners") + return ret + + print() + print("Step 3: Building coverage map") + ret = run_build_coverage(args) + if ret != 0: + print("Failed to build coverage map") + return ret + + print() + print("Pipeline completed successfully") + + return 0 + + +def main(argv=None): + """Main. + + Main program. + + """ + # Scripts to call coverage classes are created by pyproject.toml + return 0 diff --git a/src/shapepipe/get_ccds_run.py b/src/shapepipe/get_ccds_run.py new file mode 100644 index 00000000..fb18b0a7 --- /dev/null +++ b/src/shapepipe/get_ccds_run.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python3 + +"""GET_CCDS_WITH_PSF + +Obtain list of CCDs (single-exposure single-HDU files) for which valid PSF information +is available. This can serve to create a footprint coverage mask. + +Author: Martin Kilbinger + +""" + +import sys + +from shapepipe.utilities.ccd_psf_handler import CcdPsfHandler + + +def run_ccd_psf_handler(args=None): + """Run CCD PSF Handler. + + Create instance and run the CCD PSF handler. + + Parameters + ---------- + args : list, optional + command line arguments + + Returns + ------- + int + exit code + + """ + # Create instance + + obj = CcdPsfHandler() + + return obj.run(args=args) + + +def main(argv=None): + """Main. + """ + # A scripts to call the ccd psf class is created by pyproject.toml + return 0 diff --git a/src/shapepipe/modules/make_cat_package/make_cat.py b/src/shapepipe/modules/make_cat_package/make_cat.py index 4130a226..b86ace30 100644 --- a/src/shapepipe/modules/make_cat_package/make_cat.py +++ b/src/shapepipe/modules/make_cat_package/make_cat.py @@ -187,7 +187,7 @@ def save_sm_data( sm = np.copy(sexcat_sm_file.get_data()["SPREAD_MODEL"]) sm_err = np.copy(sexcat_sm_file.get_data()["SPREADERR_MODEL"]) - + sexcat_sm_file.close() else: @@ -341,12 +341,16 @@ def _save_ngmix_data(self, ngmix_cat_path, moments=False): ngmix_cat_file.open() ngmix_n_epoch = ngmix_cat_file.get_data()["n_epoch_model"] - if len(ngmix_n_epoch) / self._cat_size_target < 0.9: + # Low number of ngmix objects could be due to + # (1) shape measurement failures (e.g. missing PSF): ok, continue + # (2) previous processing errors, e.g. premature run of + # merge_sep_cats_runner: raise error + if len(ngmix_n_epoch) / self._cat_size_target < 0.0: ngmix_cat_file.close() err_msg = ( - f"Merged shape catalogue {ngmix_cat_path} has very different size" - + f" ({len(ngmix_n_epoch)}) than target size" - + f" {self._cat_size_target})" + f"Merged shape catalogue {ngmix_cat_path} has very different" + + f" size ({len(ngmix_n_epoch)}) compared to target size" + + f" {self._cat_size_target})" ) return err_msg diff --git a/src/shapepipe/modules/mask_package/mask.py b/src/shapepipe/modules/mask_package/mask.py index 36b553da..e749f557 100644 --- a/src/shapepipe/modules/mask_package/mask.py +++ b/src/shapepipe/modules/mask_package/mask.py @@ -14,6 +14,8 @@ from astropy.coordinates import SkyCoord from astropy.io import fits +from astroquery.vizier import Vizier + from shapepipe.pipeline import file_io from shapepipe.pipeline.config import CustomParser from shapepipe.pipeline.execute import execute @@ -119,6 +121,16 @@ def __init__( # Set error flag self._err = False + # Guide Star Catalogue parameters + #self._CDS_cat_ID = "I/271/out" # GSC 2.2, does not have Fmag + self._CDS_cat_ID = "I/305/out" # GSC 2.3 + + # Keys in CDS astroquery result + self._cds_keys = ["GSC2.3", "RAJ2000", "DEJ2000", "Fmag", "jmag", "Vmag", "Nmag", "Class"] + + # Minimal scaling for halo and spike polygon templates + self._scaling_min = 0.1 + def _get_config(self): """Get Config. @@ -460,7 +472,7 @@ def find_stars(self, position, radius): Returns ------- dict - Star dicotionnary for GSC objects in the field + Star dictionnary for GSC objects in the field Raises ------ @@ -468,37 +480,28 @@ def find_stars(self, position, radius): For invalid configuration options """ - if "CDSclient" in self._config["PATH"]: - ra = position[0] - dec = position[1] - - if dec > 0.0: - sign = "+" - else: - sign = "" - - cmd_line = ( - f'{self._config["PATH"]["CDSclient"]} {ra} {sign}{dec} ' - + f"-r {radius} -n 1000000" - ) - - self._CDS_stdout, self._CDS_stderr = execute(cmd_line) - - elif "star_cat" in self._config["PATH"]: + if "star_cat" in self._config["PATH"]: f = open(self._config["PATH"]["star_cat"], "r") self._CDS_stdout = f.read() - self._CDS_stderr = "" f.close() - else: - raise ValueError( - "Either [PROGRAM_PATH]:CDSCLIENT_PATH in the mask config file " - + " or a star catalogue as module input needs to be present" - ) - - if self._CDS_stderr != "": - self._err = True - return None + # For some exposures, Vizier returned empty star list if input position + # is not single precision + p = np.array(position, dtype='single') + + coord = SkyCoord(ra=p[0] * units.deg, dec=p[1] * units.deg, frame="icrs") + + Vizier.ROW_LIMIT = -1 # no row limit + result = Vizier.query_region(coord, radius=radius*units.arcmin, catalog=self._CDS_cat_ID) + if len(result) == 0: + raise IndexError( + "Vizier astroquer returned empty list at ", + coord, + radius + ) + self._CDS_stdout = result[0] + + self._CDS_stderr = "" return self._make_star_cat(self._CDS_stdout) @@ -803,12 +806,12 @@ def _get_image_radius(self, center=None): def _make_star_cat(self, CDSclient_output): """Make Star Catalogue. - Make a dictionary from findgsc2.2 output. + Create a dictionary from an astroquery request. Parameters ---------- CDSclient_output : str - Output of findgsc2.2 + Output astroquery Returns ------- @@ -819,37 +822,8 @@ def _make_star_cat(self, CDSclient_output): header = [] stars = {} - # get header - for key in CDSclient_output.splitlines()[3].split(" "): - if (key != "") and (key != ";"): - # cleaning output - key = key.replace(" ", "") - for key_split in re.split(",|#|;", key): - if key_split != "": - key = key_split - header.append(key) - stars[key] = [] - - # get data - for elem in range(4, len(CDSclient_output.splitlines()) - 5): - idx = 0 - for key in CDSclient_output.splitlines()[elem].split(" "): - if (key != "") and (key != ";"): - # cleaning output - key = key.replace(" ", "") - for key_split in re.split(",|#|;", key): - if key_split != "": - key = key_split - # handle missing data - try: - key = float(key) - stars[header[idx]].append(key) - except Exception: - if key == "---": - stars[header[idx]].append(None) - else: - stars[header[idx]].append(key) - idx += 1 + for key in self._cds_keys: + stars[key] = CDSclient_output[key] return stars @@ -907,6 +881,7 @@ def _create_mask( stars_used = [[], [], []] + """ star_zip = zip( stars["RA(J2000)"], stars["Dec(J2000)"], @@ -916,11 +891,17 @@ def _create_mask( stars["Nmag"], stars["Clas"], ) + """ + + # Get keys without object name + keys_to_use = self._cds_keys[1:] + star_zip = zip(*(stars[k] for k in keys_to_use)) for ra, dec, Fmag, Jmag, Vmag, Nmag, clas in star_zip: mag = 0.0 idx = 0.0 + # Compute mean magnitude if Fmag is not None: mag += Fmag idx += 1.0 @@ -946,6 +927,8 @@ def _create_mask( ): if (mag < mag_limit) and (clas == 0): scaling = 1.0 - scale_factor * (mag - mag_pivot) + if scaling < self._scaling_min: + scaling = self._scaling_min pos = self._wcs.all_world2pix(ra, dec, 0) stars_used[0].append(pos[0]) stars_used[1].append(pos[1]) @@ -1014,6 +997,7 @@ def _exec_WW(self, types="HALO"): self._WW_stdout, self._WW_stderr = execute(cmd) self._rm_reg_stdout, self._rm_reg_stderr = execute(f"rm {reg}") + else: reg = self._config[types]["reg_file"] @@ -1032,10 +1016,10 @@ def _exec_WW(self, types="HALO"): self._WW_stdout, self._WW_stderr = execute(cmd) + elif types == "ALL": default_reg = [ - (f'{self._config["PATH"]["temp_dir"]}' + f"halo{self._img_number}.reg"), ( f'{self._config["PATH"]["temp_dir"]}' + f"halo{self._img_number}.reg" @@ -1072,7 +1056,6 @@ def _exec_WW(self, types="HALO"): self._rm_reg_stdout, self._rm_reg_stderr = execute( f"rm {reg[0]} {reg[1]}" ) - else: reg = [ self._config["HALO"]["reg_file"], diff --git a/src/shapepipe/modules/mask_runner.py b/src/shapepipe/modules/mask_runner.py index 0cbec20e..8cfd9375 100644 --- a/src/shapepipe/modules/mask_runner.py +++ b/src/shapepipe/modules/mask_runner.py @@ -2,7 +2,7 @@ Module runner for ``mask``. -:Author: Axel Guinot +:Author: Axel Guinot, Martin Kilbinger """ @@ -15,7 +15,7 @@ file_pattern=["image", "weight", "flag"], file_ext=[".fits", ".fits", ".fits"], depends=["numpy", "astropy"], - executes=["ww", "findgsc2.2"], + executes=["ww"], numbering_scheme="_0", ) def mask_runner( diff --git a/src/shapepipe/modules/sextractor_package/sextractor_script.py b/src/shapepipe/modules/sextractor_package/sextractor_script.py index 22d5106c..3238edf4 100644 --- a/src/shapepipe/modules/sextractor_package/sextractor_script.py +++ b/src/shapepipe/modules/sextractor_package/sextractor_script.py @@ -114,7 +114,9 @@ def make_post_process(cat_path, f_wcs_path, pos_params, ccd_size): ) w = f_wcs[exp][idx_j]["WCS"] pix_tmp = w.all_world2pix( - cat.get_data()[pos_params[0]], cat.get_data()[pos_params[1]], 0 + cat.get_data()[pos_params[0]], cat.get_data()[pos_params[1]], + 0, + quiet=True, ) ind = ( (pix_tmp[0] > int(ccd_size[0])) diff --git a/src/shapepipe/modules/uncompress_fits_package/uncompress_fits.py b/src/shapepipe/modules/uncompress_fits_package/uncompress_fits.py index 55f3d4d7..85627d13 100644 --- a/src/shapepipe/modules/uncompress_fits_package/uncompress_fits.py +++ b/src/shapepipe/modules/uncompress_fits_package/uncompress_fits.py @@ -7,6 +7,7 @@ """ from astropy.io import fits +import fitsio class Uncompress(object): @@ -54,9 +55,29 @@ def process(self): for idx in range(len(self._input_file_list)): # Get data and header - data = fits.getdata(self._input_file_list[idx], self._data_hdu) - header = fits.getheader(self._input_file_list[idx], self._data_hdu) - + # 2025: Bug while reading data (Invalid TFORM2: 1PE(625) + try: + data = fits.getdata(self._input_file_list[idx], self._data_hdu) + header = fits.getheader(self._input_file_list[idx], self._data_hdu) + except: + hdu = fitsio.FITS(self._input_file_list[idx])[self._data_hdu] + data = hdu.read() + header_fitsio = hdu.read_header() + + # Transform header to astropy.io.fits + header = fits.Header() + for name in header_fitsio.keys(): + # Skip empty keys (padding in header) + if name: + value = header_fitsio[name] + comment = header_fitsio.get_comment(name) + + # Optional: fix invalid TFORMn + if name.startswith('TFORM') and isinstance(value, str) and 'PE' in value: + value = '625E' + + header[name] = (value, comment) + # Create and write new FITS file with that HDU only hdu = fits.PrimaryHDU(data, header) hdul = fits.HDUList([hdu]) diff --git a/scripts/python/summary_run.py b/src/shapepipe/summary_run.py similarity index 83% rename from scripts/python/summary_run.py rename to src/shapepipe/summary_run.py index f24d6574..3057a5b9 100755 --- a/scripts/python/summary_run.py +++ b/src/shapepipe/summary_run.py @@ -5,19 +5,22 @@ from shapepipe.utilities.summary import * -from summary_params_pre_v2 import * +from shapepipe.utilities.summary_params_pre_v2 import * -def main(argv=None): +def run(*args): - patch = argv[1] + patch = args[0] - if len(argv) == 3: - job_exclusive = argv[2] + if len(args) >= 2: + job_exclusive = args[1] else: job_exclusive = None - verbose = False + if len(args) == 3: + verbose = True + else: + verbose = False jobs, list_tile_IDs_dot = set_jobs_v2_pre_v2(patch, verbose) @@ -73,5 +76,12 @@ def main(argv=None): return 0 +def main(args=None): + + if args is None: + args = sys.argv[1:] # skip script name + run(*args) + + if __name__ == "__main__": - sys.exit(main(sys.argv)) + sys.exit(main()) diff --git a/src/shapepipe/utilities/ccd_psf_handler.py b/src/shapepipe/utilities/ccd_psf_handler.py new file mode 100644 index 00000000..3ee29303 --- /dev/null +++ b/src/shapepipe/utilities/ccd_psf_handler.py @@ -0,0 +1,378 @@ +"""CCD_PSF_HANDLER + +Obtain list of CCDs (single-exposure single-HDU files) for which valid PSF +information is available. This can serve to create a footprint coverage mask. + +Author: Mike Hudson, Martin Kilbinger + +""" + +import glob +import os +import re +import sys + +import numpy as np + +from cs_util import args as cs_args +from cs_util import logging + +from shapepipe.utilities import summary + + +class CcdPsfHandler(object): + """CCD PSF Handler Class. + + Handles extraction of CCDs with valid PSF information from shapepipe + patches. + """ + + def __init__(self): + """Initialize the handler.""" + self.params_default() + + def params_default(self): + """Set default parameters and command line options.""" + + self._params = { + "version_cat": "v1.6", + "n_CCD": 40, + "output": None, + } + + self._short_options = { + "version_cat": "-V", + "n_CCD": "-n", + "output": "-o", + } + + self._types = { + "n_CCD": "int", + } + + self._help_strings = { + "version_cat": "catalogue major version, allowed are v1.3, v1.4, v1.5, v1.6; default is {}", + + "n_CCD": "number of CCDs per exposure; default is {}", + "output": "output file path; default is ccds_with_psf_.txt", + } + + def set_params_from_command_line(self, args): + """Set Params From Command line. + + Only use when calling using python from command line. + Does not work from ipython or jupyter. + + Parameters + ---------- + args : list + command line arguments + + """ + # Read command line options + options = cs_args.parse_options( + self._params, + self._short_options, + self._types, + self._help_strings, + args=args, + ) + self._params = options + + # Save calling command + logging.log_command(args) + + def update_params(self): + """Update parameters. + + Set derived parameters based on input parameters. + """ + # Determine number of patches based on version + version = self._params["version_cat"] + if version in ("v1.3", "v1.4"): + n_patch = 7 + elif version == "v1.5": + n_patch = 8 + elif version == "v1.6": + n_patch = 9 + else: + raise ValueError(f"Invalid version {version}") + + self._params["n_patch"] = n_patch + self._params["patches"] = [f"P{x}" for x in np.arange(n_patch) + 1] + + # Set output file if not specified + if self._params["output"] is None: + self._params["output"] = f"ccds_with_psf_{version}.txt" + + def check_params(self): + """Check parameters for validity.""" + # Add any parameter validation logic here + pass + + def get_lines(self, fname): + """Get Lines. + + Return list of lines read from a text file. + + Parameters + ---------- + fname : str + input file name + + Returns + ------- + list + IDs + + """ + IDs = [] + with open(fname) as f: + lines = f.readlines() + for line in lines: + IDs.append(line.rstrip()) + + return IDs + + def get_exp_shdu_missing(self, patches): + """Get Exp Shdu Missing. + + Returns set of missing CCDs (single-exposure single-HDU IDs) from a list of patches. + + Parameters + ---------- + patches : list + input patches + + Returns + ------- + set + missing CCD IDs + + """ + exp_shdu_missing_all = set() + + for patch in patches: + + path_exp_shdu_missing = f"{patch}/summary/missing_job_32_all.txt" + exp_shdu_missing = self.get_lines(path_exp_shdu_missing) + + print( + f"Patch {patch}: Found {len(exp_shdu_missing)} missing ccds", + end="; ", + ) + + exp_shdu_missing_all.update(exp_shdu_missing) + + print(f"cumulative {len(exp_shdu_missing_all)} missing ccds") + + print() + + return exp_shdu_missing_all + + def get_exp(self, patches): + """Get Exp. + + Return set of exposures from a list of patches. + + Parameters + ---------- + patches : list + input patches + + Returns + ------- + set + exposure IDs + + """ + exp_all = set() + + for patch in patches: + + path_exp = f"{patch}/exp_numbers.txt" + exp = self.get_lines(path_exp) + + print(f"Patch {patch}: Found {len(exp)} exposures", end="; ") + + exp_all.update(exp) + + print(f"cumulative {len(exp_all)} exposures") + + print() + + return exp_all + + def get_ccds_with_psf(self, patches, n_CCD=40): + """Get CCDs With PSF. + + Return set of CCDs from list of patches. + + Parameters + ---------- + patches : list + input patches + n_CCD : int + number of CCDs per exposure + + Returns + ------- + set + CCD IDs + + """ + # Get missing CCDs + print("=== get missing CCDs ===") + exp_shdu_missing_all = self.get_exp_shdu_missing(patches) + + # Get all exposures used in tiles + print("=== get exposures ===") + exp_all = self.get_exp(patches) + + # Turn exposures into exposure-single-HDU names (CCDs) + exp_shdu_all = summary.get_all_shdus(exp_all, n_CCD) + + print(f"Found {len(exp_shdu_all)} CCDs") + + return exp_shdu_all + + def get_ccds_with_psf_method_v1_3(self, patches, n_CCD=40): + """Get CCDs With PSF Method v1.3. + + Return set of CCDs with valid PSF by scanning run directories. + Finds star_selection files and checks corresponding stat files + for valid (non-nan) FWHM values. + + Parameters + ---------- + patches : list + input patches + n_CCD : int + number of CCDs per exposure (unused, kept for API consistency) + + Returns + ------- + set + CCD IDs with valid PSF + + """ + exp_shdu_all = set() + + for patch in patches: + # Find all star_selection files + mask_pattern = ( + f"{patch}/output/run_sp_exp_SxSePs*/" + f"setools_runner/output/mask/star_selection-*.fits" + ) + mask_files = glob.glob(mask_pattern) + + print( + f"Patch {patch}: Found {len(mask_files)} star_selection FITS" + + " files" + ) + + for mask_file in mask_files: + # Extract exp_shdu from filename + basename = os.path.basename(mask_file) + match = re.match(r"star_selection-(.+)\.fits", basename) + if not match: + print(f"Warning: Non-matching file name {basename}") + continue + exp_shdu = match.group(1) + + # Get corresponding stat file path + # Replace mask dir with stat/stat dir in the path + stat_file = mask_file.replace( + "/mask/star_selection-", + "/stat/star_stat-", + ).replace(".fits", ".txt") + + #print("MKDEBUG ", exp_shdu, stat_file) + + # Check if stat file exists and has valid FWHM + if not os.path.exists(stat_file): + print("MKDEBUG stat file ", stat_file, " does not exist") + continue + + # Read stat file and check for nan in "Mean star fwhm selected" + has_nan = False + with open(stat_file) as f: + for line in f: + if "Mean star fwhm selected" in line: + if "nan" in line.lower(): + has_nan = True + break + + if not has_nan: + #print("MKDEBUG append", exp_shdu) + exp_shdu_all.add(exp_shdu) + + print(f"After patch {patch}: {len(exp_shdu_all)} CCDs with valid PSF") + + print(f"Found {len(exp_shdu_all)} CCDs with valid PSF") + + return exp_shdu_all + + def save(self, IDs, path): + """Save. + + Save list of IDs to text file. + + Parameters + ---------- + IDs : set + input IDs + path : str + output file name + + """ + with open(path, "w") as f_out: + for ID in IDs: + print(ID, file=f_out) + + def run(self, args=None): + """Run. + + Main execution method. + + Parameters + ---------- + args : list, optional + command line arguments + + Returns + ------- + int + exit code (0 for success) + + """ + if args is None: + args = sys.argv + + # Set parameters from command line + self.set_params_from_command_line(args) + self.update_params() + self.check_params() + + # Get parameters + patches = self._params["patches"] + version = self._params["version_cat"] + n_CCD = self._params["n_CCD"] + output = self._params["output"] + + print( + f"=== get_ccds_with_psf for version {version}, patches {patches} ===" + ) + + if self._params["version_cat"] == "v1.3": + print("=== method for 1.3: exp with PSF star sample === ") + exp_shdu_all = self.get_ccds_with_psf_method_v1_3(patches, n_CCD) + else: + print("=== method for >= 1.4: exp_list - missing === ") + exp_shdu_all = self.get_ccds_with_psf(patches, n_CCD) + + self.save(exp_shdu_all, output) + + print(f"Results saved to {output}") + + return 0 diff --git a/src/shapepipe/utilities/coverage_map_builder.py b/src/shapepipe/utilities/coverage_map_builder.py new file mode 100644 index 00000000..152598e1 --- /dev/null +++ b/src/shapepipe/utilities/coverage_map_builder.py @@ -0,0 +1,325 @@ +"""COVERAGE_MAP_BUILDER + +Build HealSparse coverage maps from field corner coordinates. + +Author: Mike Hudson, Martin Kilbinger + +""" + +import sys +from os.path import exists + +import numpy as np +import healsparse as hsp +import hpgeom as hpg + +from cs_util import args as cs_args +from cs_util import logging + +from shapepipe.utilities.coverage_plotter import CoveragePlotter + + +class CoverageMapBuilder(object): + """Coverage Map Builder Class. + + Builds HealSparse coverage maps from field corner coordinates. + """ + + def __init__(self): + """Initialize the builder.""" + self.params_default() + + def params_default(self): + """Set default parameters and command line options.""" + + self._params = { + "input_file": "exp_ra_dec.txt", + "output_file": "coverage.hsp", + "nside_coverage": 32, + "nside": 2048, + "apply_median_filter": False, + "n_median_iterations": 2, + "create_boolean": False, + "boolean_threshold": 3, + "boolean_output": None, + "create_plot": False, + "plot_output": None, + "plot_region": None, + } + + self._short_options = { + "input_file": "-i", + "output_file": "-o", + "nside_coverage": "-c", + "nside": "-n", + "apply_median_filter": "-m", + "n_median_iterations": "-N", + "create_boolean": "-b", + "boolean_threshold": "-t", + "boolean_output": "-B", + "create_plot": "-p", + "plot_output": "-P", + "plot_region": "-g", + } + + self._types = { + "nside_coverage": "int", + "nside": "int", + "apply_median_filter": "bool", + "n_median_iterations": "int", + "create_boolean": "bool", + "boolean_threshold": "int", + "create_plot": "bool", + } + + self._help_strings = { + "input_file": "input file with field corners; default is {}", + "output_file": "output HealSparse map file; default is {}", + "nside_coverage": "HealSparse coverage nside; default is {}", + "nside": "HealSparse map nside; default is {}", + "apply_median_filter": "apply median filter to smooth map; default is {}", + "n_median_iterations": "number of median filter iterations; default is {}", + "create_boolean": "create boolean coverage map; default is {}", + "boolean_threshold": "threshold value for boolean map; default is {}", + "boolean_output": "output file for boolean map; default is _bool.hsp", + "create_plot": "create plot of coverage map; default is {}", + "plot_output": "output file for plot; default is .png", + "plot_region": "predefined region for plot (NGC, SGC, fullsky); default is {}", + } + + def set_params_from_command_line(self, args): + """Set Params From Command line. + + Only use when calling using python from command line. + Does not work from ipython or jupyter. + + Parameters + ---------- + args : list + command line arguments + + """ + # Read command line options + options = cs_args.parse_options( + self._params, + self._short_options, + self._types, + self._help_strings, + args=args, + ) + self._params = options + + # Save calling command + logging.log_command(args) + + def update_params(self): + """Update parameters. + + Set derived parameters based on input parameters. + """ + # Set boolean output filename if not specified + if self._params["boolean_output"] is None: + output_file = self._params["output_file"] + if output_file.endswith(".hsp"): + base = output_file[:-4] + else: + base = output_file + self._params["boolean_output"] = f"{base}_bool.hsp" + + # Set plot output filename if not specified + if self._params["plot_output"] is None: + output_file = self._params["output_file"] + if output_file.endswith(".hsp"): + base = output_file[:-4] + else: + base = output_file + self._params["plot_output"] = f"{base}.png" + + def check_params(self): + """Check parameters for validity.""" + if not exists(self._params["input_file"]): + raise FileNotFoundError( + f"Input file not found: {self._params['input_file']}" + ) + + # Check nside values are powers of 2 + nside_coverage = self._params["nside_coverage"] + nside = self._params["nside"] + + if not (nside_coverage & (nside_coverage - 1) == 0): + raise ValueError( + f"nside_coverage must be a power of 2, got {nside_coverage}" + ) + + if not (nside & (nside - 1) == 0): + raise ValueError(f"nside must be a power of 2, got {nside}") + + def median_filter(self, hsp_map): + """Median Filter. + + Apply median filter to HealSparse map using neighbors. + + Parameters + ---------- + hsp_map : healsparse.HealSparseMap + input map + + Returns + ------- + healsparse.HealSparseMap + filtered map + + """ + nside = hsp_map.nside_sparse + + new_hsp = hsp_map + 0 + pixs = hsp_map.valid_pixels + n = hpg.neighbors(nside, pixs) + n = np.where(n >= 0, n, 0) + pix2 = pixs.reshape(len(pixs), 1) + n = np.hstack([n, pix2]) + mn = hsp_map[n] + new = np.median(mn, axis=1).astype(np.uint16) + new_hsp[pixs] = new + + return new_hsp + + def run(self, args=None): + """Run. + + Main execution method. + + Parameters + ---------- + args : list, optional + command line arguments + + Returns + ------- + int + exit code (0 for success) + + """ + if args is None: + args = sys.argv + + # Set parameters from command line + self.set_params_from_command_line(args) + self.update_params() + self.check_params() + + # Get parameters + input_file = self._params["input_file"] + output_file = self._params["output_file"] + nside_coverage = self._params["nside_coverage"] + nside = self._params["nside"] + apply_median_filter = self._params["apply_median_filter"] + n_median_iterations = self._params["n_median_iterations"] + create_boolean = self._params["create_boolean"] + boolean_threshold = self._params["boolean_threshold"] + boolean_output = self._params["boolean_output"] + create_plot = self._params["create_plot"] + plot_output = self._params["plot_output"] + plot_region = self._params["plot_region"] + verbose = self._params["verbose"] + + if verbose: + print(f"Reading field corners from: {input_file}") + + # Load field corner data + dtype = np.dtype( + [ + ("expnum", int), + ("tlra", float), + ("trra", float), + ("brra", float), + ("blra", float), + ("tldec", float), + ("trdec", float), + ("brdec", float), + ("bldec", float), + ] + ) + rows = np.loadtxt(input_file, dtype=dtype) + + print(f"Loaded {len(rows)} exposure field corners") + + if verbose: + print( + f"Creating HealSparse map (nside_coverage={nside_coverage}, nside={nside})" + ) + + # Create empty map + m = hsp.HealSparseMap.make_empty(nside_coverage, nside, np.uint16) + + # Add polygons for each exposure + if verbose: + print("Adding polygons to map") + + for i, r in enumerate(rows): + ra = [r["tlra"], r["trra"], r["brra"], r["blra"]] + dec = [r["tldec"], r["trdec"], r["brdec"], r["bldec"]] + poly = hsp.Polygon(ra=ra, dec=dec, value=1) + m += poly + + if verbose and i % 1000 == 0: + print(f"{i:6d} / {len(rows):6d}") + + print(f"Added {len(rows)} polygons to map") + + # Apply median filter if requested + if apply_median_filter: + if verbose: + print( + f"Applying median filter ({n_median_iterations} iterations)" + ) + + for i in range(n_median_iterations): + m = self.median_filter(m) + if verbose: + print(f" Iteration {i+1}/{n_median_iterations} complete") + + # Write main coverage map + if verbose: + print(f"Writing coverage map to: {output_file}") + + m.write(output_file, clobber=True) + print(f"Coverage map saved to {output_file}") + + # Create and write boolean map if requested + if create_boolean: + if verbose: + print( + f"Creating boolean map (threshold={boolean_threshold})" + ) + + c = hsp.HealSparseMap.make_empty(nside_coverage, nside, bool) + c[m.valid_pixels] = m[m.valid_pixels] >= boolean_threshold + + if verbose: + print(f"Writing boolean map to: {boolean_output}") + + c.write(boolean_output, clobber=True) + print(f"Boolean map saved to {boolean_output}") + + # Create plot if requested + if create_plot: + if verbose: + print(f"Creating plot of coverage map") + + try: + plotter = CoveragePlotter() + plotter.plot_coverage_map( + m, + plot_output, + region=plot_region, + vmax=boolean_threshold if create_boolean else 3, + colorbar=True, + colorbar_label="Coverage depth", + ) + print(f"Plot saved to {plot_output}") + except ImportError as e: + print(f"Warning: Could not create plot: {e}") + print("Install sp_validation package for plotting support: pip install -e /path/to/sp_validation") + + return 0 diff --git a/src/shapepipe/utilities/coverage_plotter.py b/src/shapepipe/utilities/coverage_plotter.py new file mode 100644 index 00000000..14f84fc6 --- /dev/null +++ b/src/shapepipe/utilities/coverage_plotter.py @@ -0,0 +1,343 @@ +"""COVERAGE_PLOTTER + +Plot HealSparse coverage maps. + +Author: Mike Hudson, Martin Kilbinger + +""" + +import sys +from os.path import exists + +import numpy as np +import healsparse as hsp +import matplotlib +import matplotlib.pyplot as plt + +try: + from cs_util.plots import FootprintPlotter + HAS_FOOTPRINT_PLOTTER = True +except ImportError: + HAS_FOOTPRINT_PLOTTER = False + +from cs_util import args as cs_args +from cs_util import logging + + +class CoveragePlotter(object): + """Coverage Plotter Class. + + Plots HealSparse coverage maps. + """ + + def __init__(self): + """Initialize the plotter.""" + self.params_default() + + def params_default(self): + """Set default parameters and command line options.""" + + self._params = { + "input_file": None, + "output_file": "coverage_plot.png", + "region": None, + "ralo": 100.0, + "rahi": 270.0, + "declo": 28.0, + "dechi": 85.0, + "vmin": 0, + "vmax": 3, + "cmap": "rainbow", + "draw_milky_way": True, + "colorbar": True, + "colorbar_label": "Coverage depth", + "figsize_x": 12, + "figsize_y": 8, + "dpi": 200, + } + + self._short_options = { + "input_file": "-i", + "output_file": "-o", + "region": "-g", + "ralo": "-R", + "rahi": "-r", + "declo": "-D", + "dechi": "-d", + "vmin": "-m", + "vmax": "-M", + "cmap": "-c", + "draw_milky_way": "-w", + "colorbar": "-C", + "colorbar_label": "-L", + "figsize_x": "-x", + "figsize_y": "-y", + "dpi": "-p", + } + + self._types = { + "ralo": "float", + "rahi": "float", + "declo": "float", + "dechi": "float", + "vmin": "int", + "vmax": "int", + "draw_milky_way": "bool", + "colorbar": "bool", + "figsize_x": "float", + "figsize_y": "float", + "dpi": "int", + } + + self._help_strings = { + "input_file": "input HealSparse map file; required", + "output_file": "output plot file (png, pdf, etc.); default is {}", + "region": "predefined region (NGC, SGC, fullsky); overrides RA/Dec limits if specified; default is {}", + "ralo": "minimum RA for plot extent; default is {}", + "rahi": "maximum RA for plot extent; default is {}", + "declo": "minimum Dec for plot extent; default is {}", + "dechi": "maximum Dec for plot extent; default is {}", + "vmin": "minimum value for colormap; default is {}", + "vmax": "maximum value for colormap; default is {}", + "cmap": "matplotlib colormap name; default is {}", + "draw_milky_way": "draw Milky Way outline; default is {}", + "colorbar": "add colorbar to plot; default is {}", + "colorbar_label": "colorbar label; default is {}", + "figsize_x": "figure width in inches; default is {}", + "figsize_y": "figure height in inches; default is {}", + "dpi": "figure DPI; default is {}", + } + + def set_params_from_command_line(self, args): + """Set Params From Command line. + + Only use when calling using python from command line. + Does not work from ipython or jupyter. + + Parameters + ---------- + args : list + command line arguments + + """ + # Read command line options + options = cs_args.parse_options( + self._params, + self._short_options, + self._types, + self._help_strings, + args=args, + ) + self._params = options + + # Save calling command + logging.log_command(args) + + def update_params(self): + """Update parameters. + + Set derived parameters based on input parameters. + """ + pass + + def check_params(self): + """Check parameters for validity.""" + if self._params["input_file"] is None: + raise ValueError("Input file is required (use -i or --input_file)") + + if not exists(self._params["input_file"]): + raise FileNotFoundError( + f"Input file not found: {self._params['input_file']}" + ) + + if not HAS_FOOTPRINT_PLOTTER: + raise ImportError( + "cs_util package with FootprintPlotter is required for plotting. " + "Install with: pip install -e /path/to/cs_util" + ) + + # Check region validity + region = self._params["region"] + if region is not None: + valid_regions = list(FootprintPlotter._regions.keys()) + if region not in valid_regions: + raise ValueError( + f"Invalid region '{region}'. Valid regions are: {', '.join(valid_regions)}" + ) + + def plot_coverage_map( + self, + hsp_map, + output_file, + region=None, + ralo=100.0, + rahi=270.0, + declo=28.0, + dechi=85.0, + vmin=0, + vmax=3, + title=None, + colorbar=True, + colorbar_label="Coverage depth", + figsize=(10, 10), + dpi=200, + ): + """Plot Coverage Map. + + Create a plot of the HealSparse coverage map using FootprintPlotter. + + Parameters + ---------- + hsp_map : healsparse.HealSparseMap + coverage map to plot + output_file : str + output file path + region : str, optional + predefined region name (NGC, SGC, fullsky) + ralo : float + minimum RA for plot extent (used if region is None) + rahi : float + maximum RA for plot extent (used if region is None) + declo : float + minimum Dec for plot extent (used if region is None) + dechi : float + maximum Dec for plot extent (used if region is None) + vmin : int + minimum value for colormap + vmax : int + maximum value for colormap + title : str, optional + plot title + colorbar : bool + add colorbar to plot + colorbar_label : str + colorbar label + figsize : tuple + figure size (width, height) in inches + dpi : int + figure DPI + + """ + # Set up matplotlib parameters + font = {"size": 16} + matplotlib.rc("font", **font) + matplotlib.rcParams["savefig.dpi"] = dpi + matplotlib.rcParams["figure.dpi"] = dpi + matplotlib.rcParams["figure.figsize"] = figsize + + # Create FootprintPlotter instance + plotter = FootprintPlotter( + nside_coverage=hsp_map.nside_coverage, + nside_map=hsp_map.nside_sparse + ) + + # Plot based on region or manual extent + if region is not None: + # Use predefined region + region_params = FootprintPlotter._regions[region] + plotter.plot_region( + hsp_map, + region_params, + outpath=output_file, + title=title, + colorbar=colorbar, + colorbar_label=colorbar_label + ) + else: + # Use manual RA/Dec limits + # Calculate ra_0 for projection + if ralo < rahi: + ra_0 = (ralo + rahi) / 2.0 + else: + ra_0 = 130.0 + + extend = [ralo, rahi, declo, dechi] + plotter.plot_area( + hsp_map, + ra_0=ra_0, + extend=extend, + vmax=vmax, + outpath=output_file, + title=title, + colorbar=colorbar, + colorbar_label=colorbar_label + ) + + def run(self, args=None): + """Run. + + Main execution method. + + Parameters + ---------- + args : list, optional + command line arguments + + Returns + ------- + int + exit code (0 for success) + + """ + if args is None: + args = sys.argv + + # Set parameters from command line + self.set_params_from_command_line(args) + self.update_params() + self.check_params() + + # Get parameters + input_file = self._params["input_file"] + output_file = self._params["output_file"] + region = self._params["region"] + ralo = self._params["ralo"] + rahi = self._params["rahi"] + declo = self._params["declo"] + dechi = self._params["dechi"] + vmin = self._params["vmin"] + vmax = self._params["vmax"] + colorbar = self._params["colorbar"] + colorbar_label = self._params["colorbar_label"] + figsize_x = self._params["figsize_x"] + figsize_y = self._params["figsize_y"] + dpi = self._params["dpi"] + verbose = self._params["verbose"] + + if verbose: + print(f"Reading coverage map from: {input_file}") + + # Load HealSparse map + hsp_map = hsp.HealSparseMap.read(input_file) + + print(f"Loaded map with nside={hsp_map.nside_sparse}") + print( + f"Valid pixels: {len(hsp_map.valid_pixels)} / {hsp_map.nside_sparse**2 * 12}" + ) + + if verbose: + if region: + print(f"Creating plot for region: {region}") + else: + print(f"Creating plot with extent: RA=[{ralo}, {rahi}], Dec=[{declo}, {dechi}]") + + # Create plot + self.plot_coverage_map( + hsp_map, + output_file, + region=region, + ralo=ralo, + rahi=rahi, + declo=declo, + dechi=dechi, + vmin=vmin, + vmax=vmax, + colorbar=colorbar, + colorbar_label=colorbar_label, + figsize=(figsize_x, figsize_y), + dpi=dpi, + ) + + print(f"Plot saved to {output_file}") + + return 0 diff --git a/src/shapepipe/utilities/field_corners_extractor.py b/src/shapepipe/utilities/field_corners_extractor.py new file mode 100644 index 00000000..f0765a04 --- /dev/null +++ b/src/shapepipe/utilities/field_corners_extractor.py @@ -0,0 +1,405 @@ +"""FIELD_CORNERS_EXTRACTOR + +Extract field corner coordinates from FITS headers. + +Author: Mike Hudson, Martin Kilbinger + +""" + +import sys +import os +import glob +import re +from os.path import exists +from multiprocessing import Pool, cpu_count + +import numpy as np +from astropy import wcs +from astropy.io.fits import Header + +from cs_util import args as cs_args +from cs_util import logging + + +class FieldCornersExtractor(object): + """Field Corners Extractor Class. + + Extracts RA/Dec coordinates of field corners from FITS headers. + """ + + def __init__(self): + """Initialize the extractor.""" + self.params_default() + + def params_default(self): + """Set default parameters and command line options.""" + + self._params = { + "input_dir": "header", + "output_file": "exp_ra_dec.txt", + "resume": False, + "n_processes": 1, + } + + self._short_options = { + "input_dir": "-i", + "output_file": "-o", + "resume": "-r", + "n_processes": "-n", + } + + self._types = { + "resume": "bool", + "n_processes": "int", + } + + self._help_strings = { + "input_dir": "input directory containing header files; default is {}", + "output_file": "output file for field corners; default is {}", + "resume": "resume from existing output file; default is {}", + "n_processes": f"number of parallel processes (1=serial, 0=auto={cpu_count()}); default is {{}}", + } + + def set_params_from_command_line(self, args): + """Set Params From Command line. + + Only use when calling using python from command line. + Does not work from ipython or jupyter. + + Parameters + ---------- + args : list + command line arguments + + """ + # Read command line options + options = cs_args.parse_options( + self._params, + self._short_options, + self._types, + self._help_strings, + args=args, + ) + self._params = options + + # Save calling command + logging.log_command(args) + + def update_params(self): + """Update parameters. + + Set derived parameters based on input parameters. + """ + # Ensure input directory ends without trailing slash + if self._params["input_dir"].endswith("/"): + self._params["input_dir"] = self._params["input_dir"][:-1] + + def check_params(self): + """Check parameters for validity.""" + if not exists(self._params["input_dir"]): + raise FileNotFoundError( + f"Input directory not found: {self._params['input_dir']}" + ) + + # Set n_processes to cpu_count if 0 + if self._params["n_processes"] == 0: + self._params["n_processes"] = cpu_count() + + if self._params["n_processes"] < 0: + raise ValueError( + f"n_processes must be >= 0, got {self._params['n_processes']}" + ) + + @staticmethod + def process_single_header(path_and_verbose): + """Process Single Header. + + Worker function to process a single header file. + Static method so it can be pickled for multiprocessing. + + Parameters + ---------- + path_and_verbose : tuple + (path, verbose) where path is header file path and verbose is bool + + Returns + ------- + tuple or None + (expnum, ra_list, dec_list) on success, None on failure + + """ + path, verbose = path_and_verbose + + # Extract exposure number from filename + end = path.find(".txt") + expnum = int(path[end - 6 : end]) + + try: + # Parse header and extract WCS + with open(path, "r") as f: + string = f.read() + tokens = re.split(r"^(END\s+)", string, flags=re.MULTILINE) + n = len(tokens) + w = [] + for i in range(2, n - 1, 2): + h1 = Header.fromstring(tokens[i] + tokens[i + 1], sep="\n") + w.append(wcs.WCS(h1)) + + # Calculate field corners + tl = w[0].pixel_to_world(2079, 0) + tr = w[8].pixel_to_world(32, 0) + br = w[35].pixel_to_world(2079, 0) + bl = w[27].pixel_to_world(32, 0) + + ra = [tl.ra.deg, tr.ra.deg, br.ra.deg, bl.ra.deg] + dec = [tl.dec.deg, tr.dec.deg, br.dec.deg, bl.dec.deg] + + return (expnum, ra, dec) + + except Exception as e: + if verbose: + print(f"Failed to process {expnum}: {e}") + return None + + def get_wcs_from_header(self, ftext): + """Get WCS From Header. + + Parse header text file and extract WCS for all HDUs. + + Parameters + ---------- + ftext : str + path to header text file + + Returns + ------- + list or None + list of WCS objects, one per HDU, or None if parsing failed + + """ + try: + with open(ftext, "r") as f: + string = f.read() + tokens = re.split(r"^(END\s+)", string, flags=re.MULTILINE) + n = len(tokens) + h = [] + w = [] + for i in range(2, n - 1, 2): + h1 = Header.fromstring(tokens[i] + tokens[i + 1], sep="\n") + h.append(h1) + w.append(wcs.WCS(h1)) + return w + except Exception as e: + if self._params["verbose"]: + print(f"Problem opening {ftext}: {e}") + return None + + def get_megacam_field(self, w): + """Get MegaCam Field. + + Calculate RA/Dec of the 4 corners of a MegaCam field. + + Parameters + ---------- + w : list + list of WCS objects for all CCDs + + Returns + ------- + tuple + (ra_list, dec_list) where each is a list of 4 corner coordinates + + """ + # MegaCam field corners from specific chips and pixels + # Note: chips are flipped, so bottom right becomes top left, etc. + tl = w[0].pixel_to_world(2079, 0) # top left + tr = w[8].pixel_to_world(32, 0) # top right + br = w[35].pixel_to_world(2079, 0) # bottom right + bl = w[27].pixel_to_world(32, 0) # bottom left + + return ( + [tl.ra.deg, tr.ra.deg, br.ra.deg, bl.ra.deg], + [tl.dec.deg, tr.dec.deg, br.dec.deg, bl.dec.deg], + ) + + def get_done_exposures(self): + """Get Done Exposures. + + Read exposures already processed from output file. + + Returns + ------- + set + set of exposure numbers already processed + + """ + output_file = self._params["output_file"] + + if not exists(output_file): + return set() + + try: + done = np.loadtxt(output_file, usecols=(0), dtype=int) + return set(done) + except Exception as e: + if self._params["verbose"]: + print(f"Could not read existing output file: {e}") + return set() + + def run(self, args=None): + """Run. + + Main execution method. + + Parameters + ---------- + args : list, optional + command line arguments + + Returns + ------- + int + exit code (0 for success) + + """ + if args is None: + args = sys.argv + + # Set parameters from command line + self.set_params_from_command_line(args) + self.update_params() + self.check_params() + + # Get parameters + input_dir = self._params["input_dir"] + output_file = self._params["output_file"] + resume = self._params["resume"] + verbose = self._params["verbose"] + + # Find all header files + paths = glob.glob(f"{input_dir}/*.txt") + n = len(paths) + + if n == 0: + print(f"No header files found in {input_dir}/") + return 1 + + print(f"{n} header files found") + + # Get list of already processed exposures if resuming + done = set() + if resume: + done = self.get_done_exposures() + print(f"{len(done)} already done") + + # Build todo list + todo = [] + for p in paths: + end = p.find(".txt") + expnum = int(p[end - 6 : end]) + if expnum not in done: + todo.append(p) + + n_todo = len(todo) + print(f"{n_todo} to process") + + if n_todo == 0: + print("Nothing to do") + return 0 + + # Get n_processes + n_processes = self._params["n_processes"] + + # Process headers + if n_processes == 1: + # Serial processing + results = self._process_serial(todo, verbose) + else: + # Parallel processing + print(f"Using {n_processes} parallel processes") + results = self._process_parallel(todo, n_processes, verbose) + + # Filter out failed results (None values) + results = [r for r in results if r is not None] + + # Sort results by exposure number + results.sort(key=lambda x: x[0]) + + # Write results to file + mode = "a" if resume else "w" + with open(output_file, mode, buffering=1) as f: + for expnum, ra, dec in results: + f.write(f"{expnum:6d} ") + np.savetxt(f, ra, fmt="%9.5f", newline=" ") + np.savetxt(f, dec, fmt="%9.5f", newline=" ") + f.write("\n") + + n_success = len(results) + n_failed = n_todo - n_success + + print(f"Processed {n_success} exposures") + if n_failed > 0: + print(f"Failed to process {n_failed} exposures") + + print(f"Results written to {output_file}") + + return 0 + + def _process_serial(self, todo, verbose): + """Process Serial. + + Process headers serially. + + Parameters + ---------- + todo : list + list of header file paths to process + verbose : bool + verbose output + + Returns + ------- + list + list of results (expnum, ra, dec) tuples + + """ + results = [] + n_todo = len(todo) + + for i, p in enumerate(todo): + result = self.process_single_header((p, verbose)) + results.append(result) + + if verbose and i % 100 == 0: + print(f"{i:6d} / {n_todo:6d}") + + return results + + def _process_parallel(self, todo, n_processes, verbose): + """Process Parallel. + + Process headers in parallel using multiprocessing. + + Parameters + ---------- + todo : list + list of header file paths to process + n_processes : int + number of parallel processes + verbose : bool + verbose output + + Returns + ------- + list + list of results (expnum, ra, dec) tuples + + """ + # Prepare arguments for worker function + args = [(p, verbose) for p in todo] + + # Create pool and process + with Pool(processes=n_processes) as pool: + results = pool.map(self.process_single_header, args) + + return results diff --git a/src/shapepipe/utilities/header_downloader.py b/src/shapepipe/utilities/header_downloader.py new file mode 100644 index 00000000..e7cb70e6 --- /dev/null +++ b/src/shapepipe/utilities/header_downloader.py @@ -0,0 +1,247 @@ +"""HEADER_DOWNLOADER + +Download FITS headers from VOSpace for exposures listed in a CCD file. + +Author: Mike Hudson, Martin Kilbinger + +""" + +import sys +import os +from os.path import exists + +import numpy as np +import vos + +from cs_util import args as cs_args +from cs_util import logging + + +class HeaderDownloader(object): + """Header Downloader Class. + + Downloads FITS headers from VOSpace for exposures in a CCD list. + """ + + def __init__(self): + """Initialize the downloader.""" + self.params_default() + + def params_default(self): + """Set default parameters and command line options.""" + + self._params = { + "input_file": None, + "output_dir": "header", + "vospace_path": "vos:cfis/pitcairn", + "overwrite": False, + } + + self._short_options = { + "input_file": "-i", + "output_dir": "-o", + "vospace_path": "-p", + "overwrite": "-O", + } + + self._types = { + "overwrite": "bool", + } + + self._help_strings = { + "input_file": "input CCD list file (txt or csv); required", + "output_dir": "output directory for headers; default is {}", + "vospace_path": "VOSpace base path; default is {}", + "overwrite": "overwrite existing header files; default is {}", + } + + def set_params_from_command_line(self, args): + """Set Params From Command line. + + Only use when calling using python from command line. + Does not work from ipython or jupyter. + + Parameters + ---------- + args : list + command line arguments + + """ + # Read command line options + options = cs_args.parse_options( + self._params, + self._short_options, + self._types, + self._help_strings, + args=args, + ) + self._params = options + + # Save calling command + logging.log_command(args) + + def update_params(self): + """Update parameters. + + Set derived parameters based on input parameters. + """ + # Ensure output directory ends without trailing slash + if self._params["output_dir"].endswith("/"): + self._params["output_dir"] = self._params["output_dir"][:-1] + + def check_params(self): + """Check parameters for validity.""" + if self._params["input_file"] is None: + raise ValueError("Input file is required (use -i or --input_file)") + + if not exists(self._params["input_file"]): + raise FileNotFoundError( + f"Input file not found: {self._params['input_file']}" + ) + + # Create output directory if it doesn't exist + if not exists(self._params["output_dir"]): + os.makedirs(self._params["output_dir"]) + if self._params["verbose"]: + print(f"Created output directory: {self._params['output_dir']}") + + def get_exposures(self, ccd_list_file): + """Get Exposures. + + Extract unique exposure numbers from CCD list file. + + Parameters + ---------- + ccd_list_file : str + path to CCD list file (txt or csv) + + Returns + ------- + np.array + unique exposure numbers + + """ + exps = [] + + # Check if CSV format + if ccd_list_file.endswith(".csv"): + import astropy.table + + t = astropy.table.Table.read(ccd_list_file) + expccd = t["CCD"].data + r = np.char.split(expccd, sep="-") + + for i, r1 in enumerate(r): + exp = int(r1[0]) + exps.append(exp) + else: + # Text format + f = np.loadtxt(ccd_list_file, dtype="str", encoding="ascii") + r = np.char.split(f, sep="-") + + for i, r1 in enumerate(r): + exp = int(r1[0]) + exps.append(exp) + + exps = np.array(exps) + uniq = np.unique(exps) + + return uniq + + def get_fits_header(self, expnum, client): + """Get FITS Header. + + Download FITS header from VOSpace. + + Parameters + ---------- + expnum : int + exposure number + client : vos.Client + VOSpace client + + Returns + ------- + bool + True if successful, False otherwise + + """ + vospace_path = self._params["vospace_path"] + output_dir = self._params["output_dir"] + overwrite = self._params["overwrite"] + + source = f"{vospace_path}/{expnum:d}p.fits.fz" + dest = f"{output_dir}/{expnum:d}.txt" + + if exists(dest) and not overwrite: + return True + + try: + client.copy(source, dest, head=True) + return True + except Exception as e: + print(f"Could not copy {source}: {e}") + return False + + def run(self, args=None): + """Run. + + Main execution method. + + Parameters + ---------- + args : list, optional + command line arguments + + Returns + ------- + int + exit code (0 for success) + + """ + if args is None: + args = sys.argv + + # Set parameters from command line + self.set_params_from_command_line(args) + self.update_params() + self.check_params() + + # Get parameters + input_file = self._params["input_file"] + output_dir = self._params["output_dir"] + verbose = self._params["verbose"] + + if verbose: + print(f"Reading CCD list from: {input_file}") + + # Extract unique exposures + exps = self.get_exposures(input_file) + + print(f"Found {len(exps)} unique exposures") + + if verbose: + print(f"Downloading headers to: {output_dir}/") + + # Initialize VOSpace client once + client = vos.Client() + + # Download headers + n_success = 0 + n_failed = 0 + + for i, exp in enumerate(exps): + success = self.get_fits_header(exp, client) + if success: + n_success += 1 + else: + n_failed += 1 + + if verbose and i % 100 == 0: + print(f"{i:6d} / {len(exps):6d}") + + print(f"Downloaded {n_success} headers") + if n_failed > 0: + print(f"Failed to download {n_failed} headers") + + return 0 diff --git a/src/shapepipe/utilities/summary.py b/src/shapepipe/utilities/summary.py index 46ad69bd..069354cb 100755 --- a/src/shapepipe/utilities/summary.py +++ b/src/shapepipe/utilities/summary.py @@ -211,6 +211,11 @@ def check_special_one(module, path): code = 5 msg = "No object detected (weight might be 0 everywhere)" return msg, code + m = re.search("astropy\.wcs\.wcs\.NoConvergence", line) + if m: + code = 8 + msg = "WCS world2pix did not converge" + return mgs, code if module == "ngmix_runner": m = re.search("finished", line) @@ -516,12 +521,13 @@ def output_missing( # Count image IDs in names that were found earlier # Get file name pattern - if module != "split_exp_runner" or self._bit != "2": + if module != "split_exp_runner" or (self._bit != 2 and self._bit != 4096): pattern = re.compile(r"(?:\d{3}-\d{3}|\d{7}-\d+|\d{7})") else: # split_exp_runner with sp_local=0: input is exp, output is shdu # (images) and exp (header); ignore hdu number. # If sp_local=1 set bit to != 2 + # Update 11/2025: No longer working for P9 4096. Solution: set n_mult=3. pattern = re.compile( r"(?:\d{3}-\d{3}|\d{7})" ) diff --git a/scripts/python/summary_params_pre_v2.py b/src/shapepipe/utilities/summary_params_pre_v2.py similarity index 97% rename from scripts/python/summary_params_pre_v2.py rename to src/shapepipe/utilities/summary_params_pre_v2.py index 10118039..e8f7bb8b 100644 --- a/scripts/python/summary_params_pre_v2.py +++ b/src/shapepipe/utilities/summary_params_pre_v2.py @@ -58,7 +58,7 @@ def set_jobs_v2_pre_v2(patch, verbose): verbose=verbose, ) - if patch == "P8": + if patch in ("P8", "P9"): jobs["2"] = job_data( 2, ["run_sp_Uz", "run_sp_exp_Sp_shdu"], @@ -105,7 +105,7 @@ def set_jobs_v2_pre_v2(patch, verbose): verbose=verbose, ) - if patch != "P8": + if patch not in ("P8", "P9"): jobs["8"] = job_data( 8, ["run_sp_Ma_exp"], @@ -197,7 +197,7 @@ def set_jobs_v2_pre_v2(patch, verbose): verbose=verbose, ) - if patch in ("P2", "P5", "P8"): + if patch in ("P2", "P5", "P8", "P9"): n_sh = 1 else: n_sh = 8 @@ -239,8 +239,8 @@ def set_jobs_v2_pre_v2(patch, verbose): jobs["512"] = job_data( "512", - "run_sp_Mc", - "make_cat_runner", + ["run_sp_Mc"], + ["make_cat_runner"], "tile_IDs", path_main=path_main, path_left="tile_runs",