2017-11-07 14:57:46 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-01-17 22:13:21 -05:00
|
|
|
|
2017-11-07 14:57:46 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-12-05 10:11:26 -05:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-11-07 14:57:46 -05:00
|
|
|
|
2020-01-31 05:07:55 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-11-07 14:57:46 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-11-07 14:57:46 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-11-07 14:57:46 -05:00
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2017-11-07 14:57:46 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2019-03-09 22:25:27 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-07-04 10:50:12 -04:00
|
|
|
|
2018-12-31 10:41:01 -05:00
|
|
|
|
2018-07-04 10:50:12 -04:00
|
|
|
|
2018-12-31 10:41:01 -05:00
|
|
|
|
2018-07-04 10:50:12 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-07 14:57:46 -05:00
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2017-11-10 15:15:08 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-10 15:15:08 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-11-07 14:57:46 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-02-04 23:12:08 -05:00
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
|
|
|
|
|
2019-02-04 23:12:08 -05:00
|
|
|
|
|
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-07 14:57:46 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-07 14:57:46 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-10 09:34:31 -05:00
|
|
|
|
2017-11-10 15:15:08 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-11-10 09:34:31 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-10 09:34:31 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-11-10 15:15:08 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-01-14 13:57:31 -05:00
|
|
|
|
2017-11-10 15:15:08 -05:00
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2017-11-10 15:15:08 -05:00
|
|
|
|
|
|
|
|
|
2018-09-08 12:09:52 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-11-10 15:15:08 -05:00
|
|
|
|
2019-01-14 13:57:31 -05:00
|
|
|
|
|
|
|
|
|
2018-09-08 12:09:52 -04:00
|
|
|
|
|
|
|
|
|
2018-11-19 09:36:29 -05:00
|
|
|
|
2018-09-08 12:09:52 -04:00
|
|
|
|
|
|
|
|
|
2018-11-19 09:36:29 -05:00
|
|
|
|
2018-09-08 12:09:52 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-19 09:36:29 -05:00
|
|
|
|
2018-09-08 12:09:52 -04:00
|
|
|
|
|
|
|
|
|
2018-11-19 09:36:29 -05:00
|
|
|
|
2018-09-08 12:09:52 -04:00
|
|
|
|
2017-11-10 15:15:08 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
2017-11-10 15:15:08 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-11-10 09:34:31 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-04-09 16:52:21 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2020-06-14 21:52:04 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-10 09:34:31 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-04-09 16:52:21 -04:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
2017-11-10 09:34:31 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-10 15:15:08 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-09-08 12:09:52 -04:00
|
|
|
|
|
|
|
|
|
2017-11-10 15:15:08 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-10 15:15:08 -05:00
|
|
|
|
2018-09-08 12:09:52 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-09-08 12:09:52 -04:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-09-08 12:09:52 -04:00
|
|
|
|
2017-11-10 15:15:08 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2019-03-09 22:25:27 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2019-03-09 22:25:27 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2019-03-09 22:25:27 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2019-03-09 22:25:27 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2019-03-09 22:25:27 -05:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2019-03-09 22:25:27 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2019-03-09 22:25:27 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2019-03-09 22:25:27 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2019-03-09 22:25:27 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-10 15:34:55 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-02-06 13:07:11 -05:00
|
|
|
|
2017-11-10 15:34:55 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-03-31 14:23:59 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
2017-11-10 15:34:55 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2024-01-31 14:51:25 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-10-01 14:54:59 -04:00
|
|
|
|
|
|
|
|
|
2018-12-17 14:45:36 -05:00
|
|
|
|
2019-02-20 11:30:49 -05:00
|
|
|
|
2018-10-01 14:54:59 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-02-08 14:02:45 -05:00
|
|
|
|
2018-10-01 14:54:59 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-02-08 14:02:45 -05:00
|
|
|
|
2018-10-01 14:54:59 -04:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-10-01 14:54:59 -04:00
|
|
|
|
|
|
|
|
|
2019-02-20 11:30:49 -05:00
|
|
|
|
2019-02-08 14:02:45 -05:00
|
|
|
|
2019-02-20 11:30:49 -05:00
|
|
|
|
|
|
|
|
|
2018-10-01 14:54:59 -04:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-10-01 14:54:59 -04:00
|
|
|
|
|
|
|
|
|
2019-02-20 11:30:49 -05:00
|
|
|
|
2019-02-08 14:02:45 -05:00
|
|
|
|
2019-01-02 13:57:03 -05:00
|
|
|
|
2019-02-06 13:07:11 -05:00
|
|
|
|
2019-01-02 13:57:03 -05:00
|
|
|
|
|
|
|
|
|
2018-10-30 09:45:55 -04:00
|
|
|
|
|
|
|
|
|
2018-10-01 14:54:59 -04:00
|
|
|
|
|
|
|
|
|
2019-02-08 14:02:45 -05:00
|
|
|
|
2018-10-01 14:54:59 -04:00
|
|
|
|
|
|
|
|
|
2019-02-20 11:30:49 -05:00
|
|
|
|
2018-12-17 14:45:36 -05:00
|
|
|
|
2018-10-01 14:54:59 -04:00
|
|
|
|
2019-02-20 11:30:49 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-10-01 14:54:59 -04:00
|
|
|
|
2019-02-20 11:30:49 -05:00
|
|
|
|
2018-10-01 14:54:59 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-09-09 01:52:17 -04:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-09-09 01:52:17 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-09-09 01:52:17 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-19 09:36:29 -05:00
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2018-11-19 09:36:29 -05:00
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
|
|
|
|
|
2018-09-09 01:52:17 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-09-09 01:52:17 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-09-09 01:52:17 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-19 09:36:29 -05:00
|
|
|
|
2018-09-09 01:52:17 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-19 09:36:29 -05:00
|
|
|
|
2018-09-09 01:52:17 -04:00
|
|
|
|
|
|
|
|
|
2018-11-29 16:04:35 -05:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-11-29 16:04:35 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-09-09 01:52:17 -04:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-10 15:15:08 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 09:34:04 -05:00
|
|
|
|
2017-11-10 15:15:08 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
|
|
|
|
|
2017-11-10 15:15:08 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2017-11-10 15:15:08 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-09-09 01:52:17 -04:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-09-09 01:52:17 -04:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-11-29 16:04:35 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
2018-11-29 16:04:35 -05:00
|
|
|
|
2017-11-10 15:15:08 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-01-31 14:51:24 -08:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2024-01-31 14:51:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-23 12:22:21 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-01-31 14:51:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-04-23 12:22:21 -07:00
|
|
|
|
2024-01-31 14:51:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2024-01-31 14:51:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2024-01-31 14:51:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2024-01-31 14:51:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2024-01-31 14:51:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2024-01-31 14:51:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2024-01-31 14:51:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2024-01-31 14:51:24 -08:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2024-01-31 14:51:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
2024-01-31 14:51:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2024-01-31 14:51:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2024-01-31 14:51:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2024-01-31 14:51:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2024-01-31 14:51:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2024-01-31 14:51:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
2024-01-31 14:51:24 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-07-04 10:50:12 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-10-26 14:43:22 -04:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-07-04 10:50:12 -04:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-10-26 14:43:22 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-10-26 14:43:22 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-10-26 14:43:22 -04:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
2018-10-26 14:43:22 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-07-04 10:50:12 -04:00
|
|
|
|
2018-10-26 14:43:22 -04:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-07-04 10:50:12 -04:00
|
|
|
|
2018-10-26 14:43:22 -04:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
2018-07-04 10:50:12 -04:00
|
|
|
|
|
|
|
|
|
2018-10-26 14:43:22 -04:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-07-04 10:50:12 -04:00
|
|
|
|
2018-10-26 14:43:22 -04:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
2018-07-04 10:50:12 -04:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
2018-07-04 10:50:12 -04:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-07-04 10:50:12 -04:00
|
|
|
|
|
|
|
|
|
2018-10-26 14:43:22 -04:00
|
|
|
|
2018-07-04 10:50:12 -04:00
|
|
|
|
2018-10-26 14:43:22 -04:00
|
|
|
|
2018-12-31 10:41:01 -05:00
|
|
|
|
|
|
|
|
|
2018-07-04 10:50:12 -04:00
|
|
|
|
2018-10-26 14:43:22 -04:00
|
|
|
|
2018-12-31 10:41:01 -05:00
|
|
|
|
|
|
|
|
|
2018-07-04 10:50:12 -04:00
|
|
|
|
2018-10-26 14:43:22 -04:00
|
|
|
|
2018-12-31 10:41:01 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-10-26 14:43:22 -04:00
|
|
|
|
2018-12-13 13:57:42 -05:00
|
|
|
|
2018-12-31 10:41:01 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-12-31 10:41:01 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-10-26 14:43:22 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-12-31 10:41:01 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-12-31 10:41:01 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-11-06 14:13:35 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-03-20 11:22:19 +01:00
|
|
|
|
2018-11-06 14:13:35 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
2018-11-06 14:13:35 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-03-20 11:22:19 +01:00
|
|
|
|
2018-11-06 14:13:35 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
2018-11-06 14:13:35 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-03-20 11:22:19 +01:00
|
|
|
|
2018-11-06 14:13:35 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2025-03-20 11:22:19 +01:00
|
|
|
|
2018-11-06 14:13:35 -05:00
|
|
|
|
2025-03-20 11:22:19 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-06 14:13:35 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-10-26 14:43:22 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-10-26 14:43:22 -04:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-07-04 10:50:12 -04:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-06-01 22:46:02 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
|
|
|
|
|
2018-06-01 22:46:02 -04:00
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2018-06-01 22:46:02 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2018-06-01 22:46:02 -04:00
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-06-01 22:46:02 -04:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-06-01 22:46:02 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-06-01 22:46:02 -04:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-06-01 22:46:02 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-06-01 22:46:02 -04:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-06-01 22:46:02 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-06-01 22:46:02 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-06-01 22:46:02 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
2018-06-01 22:46:02 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
|
|
|
|
|
2020-01-17 22:00:41 -05:00
|
|
|
|
|
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
|
|
|
|
|
2020-01-17 22:00:41 -05:00
|
|
|
|
|
|
|
|
|
2020-01-17 22:13:21 -05:00
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-01-17 22:00:41 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
2020-01-17 22:00:41 -05:00
|
|
|
|
|
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
2020-01-17 22:00:41 -05:00
|
|
|
|
|
|
|
|
|
2020-01-17 22:13:21 -05:00
|
|
|
|
|
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2020-01-31 05:07:55 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2020-01-31 05:07:55 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-01 16:55:19 -04:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-11-01 16:55:19 -04:00
|
|
|
|
|
|
|
|
|
2018-12-17 14:45:36 -05:00
|
|
|
|
2018-11-01 16:55:19 -04:00
|
|
|
|
2018-12-17 14:45:36 -05:00
|
|
|
|
2018-11-01 16:55:19 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-12-17 14:45:36 -05:00
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2018-11-01 16:55:19 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-12-13 13:57:42 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-12-17 17:37:25 -05:00
|
|
|
|
2018-12-13 13:57:42 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-12-17 17:37:25 -05:00
|
|
|
|
2018-12-13 13:57:42 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2020-01-17 17:45:12 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2020-01-17 17:45:12 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-11-01 16:55:19 -04:00
|
|
|
|
2020-01-17 22:00:41 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-01-17 22:00:41 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-11-14 08:30:11 -05:00
|
|
|
|
|
|
|
|
|
2017-11-22 08:36:00 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-22 08:36:00 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2017-11-22 08:36:00 -05:00
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2017-11-22 08:36:00 -05:00
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2017-11-22 08:36:00 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-22 08:36:00 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2020-01-31 06:17:09 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-02-14 00:36:59 +08:00
|
|
|
|
2020-01-31 06:17:09 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Xarray: move forward index correctly in xas_pause()
After xas_load(), xas->index could point to mid of found multi-index entry
and xas->index's bits under node->shift maybe non-zero. The afterward
xas_pause() will move forward xas->index with xa->node->shift with bits
under node->shift un-masked and thus skip some index unexpectedly.
Consider following case:
Assume XA_CHUNK_SHIFT is 4.
xa_store_range(xa, 16, 31, ...)
xa_store(xa, 32, ...)
XA_STATE(xas, xa, 17);
xas_for_each(&xas,...)
xas_load(&xas)
/* xas->index = 17, xas->xa_offset = 1, xas->xa_node->xa_shift = 4 */
xas_pause()
/* xas->index = 33, xas->xa_offset = 2, xas->xa_node->xa_shift = 4 */
As we can see, index of 32 is skipped unexpectedly.
Fix this by mask bit under node->xa_shift when move forward index in
xas_pause().
For now, this will not cause serious problems. Only minor problem like
cachestat return less number of page status could happen.
Link: https://lkml.kernel.org/r/20241213122523.12764-3-shikemeng@huaweicloud.com
Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
Cc: Mattew Wilcox <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2024-12-13 20:25:20 +08:00
|
|
|
|
|
|
|
|
|
2025-02-14 00:36:59 +08:00
|
|
|
|
Xarray: move forward index correctly in xas_pause()
After xas_load(), xas->index could point to mid of found multi-index entry
and xas->index's bits under node->shift maybe non-zero. The afterward
xas_pause() will move forward xas->index with xa->node->shift with bits
under node->shift un-masked and thus skip some index unexpectedly.
Consider following case:
Assume XA_CHUNK_SHIFT is 4.
xa_store_range(xa, 16, 31, ...)
xa_store(xa, 32, ...)
XA_STATE(xas, xa, 17);
xas_for_each(&xas,...)
xas_load(&xas)
/* xas->index = 17, xas->xa_offset = 1, xas->xa_node->xa_shift = 4 */
xas_pause()
/* xas->index = 33, xas->xa_offset = 2, xas->xa_node->xa_shift = 4 */
As we can see, index of 32 is skipped unexpectedly.
Fix this by mask bit under node->xa_shift when move forward index in
xas_pause().
For now, this will not cause serious problems. Only minor problem like
cachestat return less number of page status could happen.
Link: https://lkml.kernel.org/r/20241213122523.12764-3-shikemeng@huaweicloud.com
Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
Cc: Mattew Wilcox <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2024-12-13 20:25:20 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-02-14 00:36:59 +08:00
|
|
|
|
Xarray: move forward index correctly in xas_pause()
After xas_load(), xas->index could point to mid of found multi-index entry
and xas->index's bits under node->shift maybe non-zero. The afterward
xas_pause() will move forward xas->index with xa->node->shift with bits
under node->shift un-masked and thus skip some index unexpectedly.
Consider following case:
Assume XA_CHUNK_SHIFT is 4.
xa_store_range(xa, 16, 31, ...)
xa_store(xa, 32, ...)
XA_STATE(xas, xa, 17);
xas_for_each(&xas,...)
xas_load(&xas)
/* xas->index = 17, xas->xa_offset = 1, xas->xa_node->xa_shift = 4 */
xas_pause()
/* xas->index = 33, xas->xa_offset = 2, xas->xa_node->xa_shift = 4 */
As we can see, index of 32 is skipped unexpectedly.
Fix this by mask bit under node->xa_shift when move forward index in
xas_pause().
For now, this will not cause serious problems. Only minor problem like
cachestat return less number of page status could happen.
Link: https://lkml.kernel.org/r/20241213122523.12764-3-shikemeng@huaweicloud.com
Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
Cc: Mattew Wilcox <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2024-12-13 20:25:20 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-02-14 00:36:59 +08:00
|
|
|
|
Xarray: move forward index correctly in xas_pause()
After xas_load(), xas->index could point to mid of found multi-index entry
and xas->index's bits under node->shift maybe non-zero. The afterward
xas_pause() will move forward xas->index with xa->node->shift with bits
under node->shift un-masked and thus skip some index unexpectedly.
Consider following case:
Assume XA_CHUNK_SHIFT is 4.
xa_store_range(xa, 16, 31, ...)
xa_store(xa, 32, ...)
XA_STATE(xas, xa, 17);
xas_for_each(&xas,...)
xas_load(&xas)
/* xas->index = 17, xas->xa_offset = 1, xas->xa_node->xa_shift = 4 */
xas_pause()
/* xas->index = 33, xas->xa_offset = 2, xas->xa_node->xa_shift = 4 */
As we can see, index of 32 is skipped unexpectedly.
Fix this by mask bit under node->xa_shift when move forward index in
xas_pause().
For now, this will not cause serious problems. Only minor problem like
cachestat return less number of page status could happen.
Link: https://lkml.kernel.org/r/20241213122523.12764-3-shikemeng@huaweicloud.com
Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
Cc: Mattew Wilcox <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2024-12-13 20:25:20 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-02-14 00:36:59 +08:00
|
|
|
|
|
|
|
|
|
Xarray: move forward index correctly in xas_pause()
After xas_load(), xas->index could point to mid of found multi-index entry
and xas->index's bits under node->shift maybe non-zero. The afterward
xas_pause() will move forward xas->index with xa->node->shift with bits
under node->shift un-masked and thus skip some index unexpectedly.
Consider following case:
Assume XA_CHUNK_SHIFT is 4.
xa_store_range(xa, 16, 31, ...)
xa_store(xa, 32, ...)
XA_STATE(xas, xa, 17);
xas_for_each(&xas,...)
xas_load(&xas)
/* xas->index = 17, xas->xa_offset = 1, xas->xa_node->xa_shift = 4 */
xas_pause()
/* xas->index = 33, xas->xa_offset = 2, xas->xa_node->xa_shift = 4 */
As we can see, index of 32 is skipped unexpectedly.
Fix this by mask bit under node->xa_shift when move forward index in
xas_pause().
For now, this will not cause serious problems. Only minor problem like
cachestat return less number of page status could happen.
Link: https://lkml.kernel.org/r/20241213122523.12764-3-shikemeng@huaweicloud.com
Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
Cc: Mattew Wilcox <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2024-12-13 20:25:20 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-02-14 00:36:59 +08:00
|
|
|
|
Xarray: move forward index correctly in xas_pause()
After xas_load(), xas->index could point to mid of found multi-index entry
and xas->index's bits under node->shift maybe non-zero. The afterward
xas_pause() will move forward xas->index with xa->node->shift with bits
under node->shift un-masked and thus skip some index unexpectedly.
Consider following case:
Assume XA_CHUNK_SHIFT is 4.
xa_store_range(xa, 16, 31, ...)
xa_store(xa, 32, ...)
XA_STATE(xas, xa, 17);
xas_for_each(&xas,...)
xas_load(&xas)
/* xas->index = 17, xas->xa_offset = 1, xas->xa_node->xa_shift = 4 */
xas_pause()
/* xas->index = 33, xas->xa_offset = 2, xas->xa_node->xa_shift = 4 */
As we can see, index of 32 is skipped unexpectedly.
Fix this by mask bit under node->xa_shift when move forward index in
xas_pause().
For now, this will not cause serious problems. Only minor problem like
cachestat return less number of page status could happen.
Link: https://lkml.kernel.org/r/20241213122523.12764-3-shikemeng@huaweicloud.com
Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
Cc: Mattew Wilcox <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2024-12-13 20:25:20 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-02-14 00:36:59 +08:00
|
|
|
|
Xarray: move forward index correctly in xas_pause()
After xas_load(), xas->index could point to mid of found multi-index entry
and xas->index's bits under node->shift maybe non-zero. The afterward
xas_pause() will move forward xas->index with xa->node->shift with bits
under node->shift un-masked and thus skip some index unexpectedly.
Consider following case:
Assume XA_CHUNK_SHIFT is 4.
xa_store_range(xa, 16, 31, ...)
xa_store(xa, 32, ...)
XA_STATE(xas, xa, 17);
xas_for_each(&xas,...)
xas_load(&xas)
/* xas->index = 17, xas->xa_offset = 1, xas->xa_node->xa_shift = 4 */
xas_pause()
/* xas->index = 33, xas->xa_offset = 2, xas->xa_node->xa_shift = 4 */
As we can see, index of 32 is skipped unexpectedly.
Fix this by mask bit under node->xa_shift when move forward index in
xas_pause().
For now, this will not cause serious problems. Only minor problem like
cachestat return less number of page status could happen.
Link: https://lkml.kernel.org/r/20241213122523.12764-3-shikemeng@huaweicloud.com
Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com>
Cc: Mattew Wilcox <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2024-12-13 20:25:20 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-01-31 06:17:09 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2019-07-01 17:03:29 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2019-07-01 17:03:29 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2019-11-07 22:49:11 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2019-11-07 22:49:11 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-12-01 00:06:52 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2017-12-01 00:06:52 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2017-12-01 00:06:52 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
2017-12-01 00:06:52 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-12-01 00:06:52 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2017-12-01 00:06:52 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2017-12-01 00:06:52 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-12-01 00:06:52 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2017-12-01 00:06:52 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2017-12-01 00:06:52 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
2019-07-01 17:03:29 -04:00
|
|
|
|
2017-12-01 00:06:52 -05:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-12-01 00:06:52 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-12-01 00:06:52 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-12-04 00:11:48 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2017-12-04 00:11:48 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-12-04 00:11:48 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-12-04 00:11:48 -05:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-12-04 00:11:48 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-12-04 00:11:48 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-12-04 00:11:48 -05:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-12-04 00:11:48 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-12-04 00:11:48 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-12-04 00:11:48 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2017-12-04 00:11:48 -05:00
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2017-12-04 00:11:48 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-12-04 00:11:48 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2022-03-28 19:25:11 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-12-04 00:11:48 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-12-04 00:11:48 -05:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-12-04 00:11:48 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-12-04 00:11:48 -05:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-08-15 14:13:29 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2018-08-15 14:13:29 -04:00
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
|
|
|
|
|
2018-08-15 14:13:29 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-08-15 14:13:29 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-08-15 14:13:29 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-10-15 20:05:16 -07:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2020-11-19 08:32:31 -05:00
|
|
|
|
2020-10-15 20:05:16 -07:00
|
|
|
|
2020-11-19 08:32:31 -05:00
|
|
|
|
2024-05-01 16:31:18 +01:00
|
|
|
|
|
|
|
|
|
2020-10-15 20:05:16 -07:00
|
|
|
|
|
|
|
|
|
2024-05-01 16:31:18 +01:00
|
|
|
|
2020-10-15 20:05:16 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-11-19 08:32:31 -05:00
|
|
|
|
|
|
|
|
|
2020-10-15 20:05:16 -07:00
|
|
|
|
|
|
|
|
|
2020-11-19 08:32:31 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-10-15 20:05:16 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2024-05-01 16:31:18 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-10-15 20:05:16 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
xarray: add xas_try_split() to split a multi-index entry
Patch series "Buddy allocator like (or non-uniform) folio split", v10.
This patchset adds a new buddy allocator like (or non-uniform) large folio
split from a order-n folio to order-m with m < n. It reduces
1. the total number of after-split folios from 2^(n-m) to n-m+1;
2. the amount of memory needed for multi-index xarray split from 2^(n/6-m/6) to
n/6-m/6, assuming XA_CHUNK_SHIFT=6;
3. keep more large folios after a split from all order-m folios to
order-(n-1) to order-m folios.
For example, to split an order-9 to order-0, folio split generates 10 (or
11 for anonymous memory) folios instead of 512, allocates 1 xa_node
instead of 8, and leaves 1 order-8, 1 order-7, ..., 1 order-1 and 2
order-0 folios (or 4 order-0 for anonymous memory) instead of 512 order-0
folios.
Instead of duplicating existing split_huge_page*() code, __folio_split()
is introduced as the shared backend code for both
split_huge_page_to_list_to_order() and folio_split(). __folio_split() can
support both uniform split and buddy allocator like (or non-uniform)
split. All existing split_huge_page*() users can be gradually converted
to use folio_split() if possible. In this patchset, I converted
truncate_inode_partial_folio() to use folio_split().
xfstests quick group passed for both tmpfs and xfs. I also
semi-replicated Hugh's test[12] and ran it without any issue for almost 24
hours.
This patch (of 8):
A preparation patch for non-uniform folio split, which always split a
folio into half iteratively, and minimal xarray entry split.
Currently, xas_split_alloc() and xas_split() always split all slots from a
multi-index entry. They cost the same number of xa_node as the
to-be-split slots. For example, to split an order-9 entry, which takes
2^(9-6)=8 slots, assuming XA_CHUNK_SHIFT is 6 (!CONFIG_BASE_SMALL), 8
xa_node are needed. Instead xas_try_split() is intended to be used
iteratively to split the order-9 entry into 2 order-8 entries, then split
one order-8 entry, based on the given index, to 2 order-7 entries, ...,
and split one order-1 entry to 2 order-0 entries. When splitting the
order-6 entry and a new xa_node is needed, xas_try_split() will try to
allocate one if possible. As a result, xas_try_split() would only need 1
xa_node instead of 8.
When a new xa_node is needed during the split, xas_try_split() can try to
allocate one but no more. -ENOMEM will be return if a node cannot be
allocated. -EINVAL will be return if a sibling node is split or cascade
split happens, where two or more new nodes are needed, and these are not
supported by xas_try_split().
xas_split_alloc() and xas_split() split an order-9 to order-0:
---------------------------------
| | | | | | | | |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| | | | | | | | |
---------------------------------
| | | |
------- --- --- -------
| | ... | |
V V V V
----------- ----------- ----------- -----------
| xa_node | | xa_node | ... | xa_node | | xa_node |
----------- ----------- ----------- -----------
xas_try_split() splits an order-9 to order-0:
---------------------------------
| | | | | | | | |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| | | | | | | | |
---------------------------------
|
|
V
-----------
| xa_node |
-----------
Link: https://lkml.kernel.org/r/20250307174001.242794-1-ziy@nvidia.com
Link: https://lkml.kernel.org/r/20250307174001.242794-2-ziy@nvidia.com
Signed-off-by: Zi Yan <ziy@nvidia.com>
Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: John Hubbard <jhubbard@nvidia.com>
Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
Cc: Kirill A. Shuemov <kirill.shutemov@linux.intel.com>
Cc: Miaohe Lin <linmiaohe@huawei.com>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Cc: Yang Shi <yang@os.amperecomputing.com>
Cc: Yu Zhao <yuzhao@google.com>
Cc: Zi Yan <ziy@nvidia.com>
Cc: Kairui Song <kasong@tencent.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2025-03-07 12:39:54 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2020-10-15 20:05:16 -07:00
|
|
|
|
2020-11-19 08:32:31 -05:00
|
|
|
|
2020-10-15 20:05:16 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-11-19 08:32:31 -05:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
xarray: add xas_try_split() to split a multi-index entry
Patch series "Buddy allocator like (or non-uniform) folio split", v10.
This patchset adds a new buddy allocator like (or non-uniform) large folio
split from a order-n folio to order-m with m < n. It reduces
1. the total number of after-split folios from 2^(n-m) to n-m+1;
2. the amount of memory needed for multi-index xarray split from 2^(n/6-m/6) to
n/6-m/6, assuming XA_CHUNK_SHIFT=6;
3. keep more large folios after a split from all order-m folios to
order-(n-1) to order-m folios.
For example, to split an order-9 to order-0, folio split generates 10 (or
11 for anonymous memory) folios instead of 512, allocates 1 xa_node
instead of 8, and leaves 1 order-8, 1 order-7, ..., 1 order-1 and 2
order-0 folios (or 4 order-0 for anonymous memory) instead of 512 order-0
folios.
Instead of duplicating existing split_huge_page*() code, __folio_split()
is introduced as the shared backend code for both
split_huge_page_to_list_to_order() and folio_split(). __folio_split() can
support both uniform split and buddy allocator like (or non-uniform)
split. All existing split_huge_page*() users can be gradually converted
to use folio_split() if possible. In this patchset, I converted
truncate_inode_partial_folio() to use folio_split().
xfstests quick group passed for both tmpfs and xfs. I also
semi-replicated Hugh's test[12] and ran it without any issue for almost 24
hours.
This patch (of 8):
A preparation patch for non-uniform folio split, which always split a
folio into half iteratively, and minimal xarray entry split.
Currently, xas_split_alloc() and xas_split() always split all slots from a
multi-index entry. They cost the same number of xa_node as the
to-be-split slots. For example, to split an order-9 entry, which takes
2^(9-6)=8 slots, assuming XA_CHUNK_SHIFT is 6 (!CONFIG_BASE_SMALL), 8
xa_node are needed. Instead xas_try_split() is intended to be used
iteratively to split the order-9 entry into 2 order-8 entries, then split
one order-8 entry, based on the given index, to 2 order-7 entries, ...,
and split one order-1 entry to 2 order-0 entries. When splitting the
order-6 entry and a new xa_node is needed, xas_try_split() will try to
allocate one if possible. As a result, xas_try_split() would only need 1
xa_node instead of 8.
When a new xa_node is needed during the split, xas_try_split() can try to
allocate one but no more. -ENOMEM will be return if a node cannot be
allocated. -EINVAL will be return if a sibling node is split or cascade
split happens, where two or more new nodes are needed, and these are not
supported by xas_try_split().
xas_split_alloc() and xas_split() split an order-9 to order-0:
---------------------------------
| | | | | | | | |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| | | | | | | | |
---------------------------------
| | | |
------- --- --- -------
| | ... | |
V V V V
----------- ----------- ----------- -----------
| xa_node | | xa_node | ... | xa_node | | xa_node |
----------- ----------- ----------- -----------
xas_try_split() splits an order-9 to order-0:
---------------------------------
| | | | | | | | |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| | | | | | | | |
---------------------------------
|
|
V
-----------
| xa_node |
-----------
Link: https://lkml.kernel.org/r/20250307174001.242794-1-ziy@nvidia.com
Link: https://lkml.kernel.org/r/20250307174001.242794-2-ziy@nvidia.com
Signed-off-by: Zi Yan <ziy@nvidia.com>
Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
Cc: David Hildenbrand <david@redhat.com>
Cc: Hugh Dickins <hughd@google.com>
Cc: John Hubbard <jhubbard@nvidia.com>
Cc: Kefeng Wang <wangkefeng.wang@huawei.com>
Cc: Kirill A. Shuemov <kirill.shutemov@linux.intel.com>
Cc: Miaohe Lin <linmiaohe@huawei.com>
Cc: Matthew Wilcox <willy@infradead.org>
Cc: Ryan Roberts <ryan.roberts@arm.com>
Cc: Yang Shi <yang@os.amperecomputing.com>
Cc: Yu Zhao <yuzhao@google.com>
Cc: Zi Yan <ziy@nvidia.com>
Cc: Kairui Song <kasong@tencent.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2025-03-07 12:39:54 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-11-19 08:32:31 -05:00
|
|
|
|
2020-10-15 20:05:16 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2020-10-15 20:05:16 -07:00
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-12-28 23:20:44 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-12-31 10:41:01 -05:00
|
|
|
|
|
|
|
|
|
2018-12-28 23:20:44 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-02-21 17:54:44 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2019-02-21 17:36:45 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-02-21 17:54:44 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2019-02-21 17:36:45 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-12-28 23:20:44 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-12-28 23:20:44 -05:00
|
|
|
|
|
|
|
|
|
2017-11-24 14:24:59 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-24 14:24:59 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2020-08-18 09:05:56 -04:00
|
|
|
|
2017-11-24 14:24:59 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-24 14:24:59 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-24 14:24:59 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-08-28 16:13:16 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2018-08-28 16:13:16 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-19 09:36:29 -05:00
|
|
|
|
2018-08-28 16:13:16 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2018-11-19 09:36:29 -05:00
|
|
|
|
2018-08-28 16:13:16 -04:00
|
|
|
|
2018-11-05 13:19:54 -05:00
|
|
|
|
2018-08-28 16:13:16 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2020-10-15 20:05:13 -07:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2024-04-16 01:18:55 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
mm/filemap: optimize filemap folio adding
Instead of doing multiple tree walks, do one optimism range check with
lock hold, and exit if raced with another insertion. If a shadow exists,
check it with a new xas_get_order helper before releasing the lock to
avoid redundant tree walks for getting its order.
Drop the lock and do the allocation only if a split is needed.
In the best case, it only need to walk the tree once. If it needs to
alloc and split, 3 walks are issued (One for first ranged conflict check
and order retrieving, one for the second check after allocation, one for
the insert after split).
Testing with 4K pages, in an 8G cgroup, with 16G brd as block device:
echo 3 > /proc/sys/vm/drop_caches
fio -name=cached --numjobs=16 --filename=/mnt/test.img \
--buffered=1 --ioengine=mmap --rw=randread --time_based \
--ramp_time=30s --runtime=5m --group_reporting
Before:
bw ( MiB/s): min= 1027, max= 3520, per=100.00%, avg=2445.02, stdev=18.90, samples=8691
iops : min=263001, max=901288, avg=625924.36, stdev=4837.28, samples=8691
After (+7.3%):
bw ( MiB/s): min= 493, max= 3947, per=100.00%, avg=2625.56, stdev=25.74, samples=8651
iops : min=126454, max=1010681, avg=672142.61, stdev=6590.48, samples=8651
Test result with THP (do a THP randread then switch to 4K page in hope it
issues a lot of splitting):
echo 3 > /proc/sys/vm/drop_caches
fio -name=cached --numjobs=16 --filename=/mnt/test.img \
--buffered=1 --ioengine=mmap -thp=1 --readonly \
--rw=randread --time_based --ramp_time=30s --runtime=10m \
--group_reporting
fio -name=cached --numjobs=16 --filename=/mnt/test.img \
--buffered=1 --ioengine=mmap \
--rw=randread --time_based --runtime=5s --group_reporting
Before:
bw ( KiB/s): min= 4141, max=14202, per=100.00%, avg=7935.51, stdev=96.85, samples=18976
iops : min= 1029, max= 3548, avg=1979.52, stdev=24.23, samples=18976·
READ: bw=4545B/s (4545B/s), 4545B/s-4545B/s (4545B/s-4545B/s), io=64.0KiB (65.5kB), run=14419-14419msec
After (+12.5%):
bw ( KiB/s): min= 4611, max=15370, per=100.00%, avg=8928.74, stdev=105.17, samples=19146
iops : min= 1151, max= 3842, avg=2231.27, stdev=26.29, samples=19146
READ: bw=4635B/s (4635B/s), 4635B/s-4635B/s (4635B/s-4635B/s), io=64.0KiB (65.5kB), run=14137-14137msec
The performance is better for both 4K (+7.5%) and THP (+12.5%) cached read.
Link: https://lkml.kernel.org/r/20240415171857.19244-5-ryncsn@gmail.com
Signed-off-by: Kairui Song <kasong@tencent.com>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
2024-04-16 01:18:56 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
2017-11-17 08:16:34 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-11-10 15:15:08 -05:00
|
|
|
|
2017-11-07 14:57:46 -05:00
|
|
|
|
2025-01-30 16:09:20 -08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2017-11-07 14:57:46 -05:00
|
|
|
|
2024-05-31 20:08:37 -07:00
|
|
|
|
2017-11-07 14:57:46 -05:00
|
|
|
|