diff --git a/amazon-tile_id.csv b/amazon-tile_id.csv
new file mode 100644
index 0000000000000000000000000000000000000000..6217f336c84826ead6d02179647a5c827e34d9a5
--- /dev/null
+++ b/amazon-tile_id.csv
@@ -0,0 +1,954 @@
+T17LQJ
+T17LQK
+T17LQL
+T17LRG
+T17LRH
+T17LRJ
+T17LRK
+T17LRL
+T17MPM
+T17MPN
+T17MPP
+T17MPQ
+T17MPR
+T17MPS
+T17MPT
+T17MPU
+T17MPV
+T17MQM
+T17MQN
+T17MQP
+T17MQQ
+T17MQR
+T17MQS
+T17MQT
+T17MQU
+T17MQV
+T17MRM
+T17MRN
+T17MRP
+T17MRQ
+T17MRR
+T17MRS
+T17MRT
+T17MRU
+T17MRV
+T17NPA
+T17NPB
+T17NPC
+T17NPD
+T17NQA
+T17NQB
+T17NQC
+T17NQD
+T17NQE
+T17NQF
+T17NQG
+T17NRA
+T17NRB
+T17NRC
+T17NRD
+T17NRE
+T17NRF
+T17NRG
+T18LTM
+T18LTN
+T18LTP
+T18LTQ
+T18LTR
+T18LUJ
+T18LUK
+T18LUL
+T18LUM
+T18LUN
+T18LUP
+T18LUQ
+T18LUR
+T18LVH
+T18LVJ
+T18LVK
+T18LVL
+T18LVM
+T18LVN
+T18LVP
+T18LVQ
+T18LVR
+T18LWH
+T18LWJ
+T18LWK
+T18LWL
+T18LWM
+T18LWN
+T18LWP
+T18LWQ
+T18LWR
+T18LXH
+T18LXJ
+T18LXK
+T18LXL
+T18LXM
+T18LXN
+T18LXP
+T18LXQ
+T18LXR
+T18LYH
+T18LYJ
+T18LYK
+T18LYL
+T18LYM
+T18LYN
+T18LYP
+T18LYQ
+T18LYR
+T18LZH
+T18LZJ
+T18LZK
+T18LZL
+T18LZM
+T18LZN
+T18LZP
+T18LZQ
+T18LZR
+T18MTA
+T18MTB
+T18MTC
+T18MTD
+T18MTE
+T18MTS
+T18MTT
+T18MTU
+T18MTV
+T18MUA
+T18MUB
+T18MUC
+T18MUD
+T18MUE
+T18MUS
+T18MUT
+T18MUU
+T18MUV
+T18MVA
+T18MVB
+T18MVC
+T18MVD
+T18MVE
+T18MVS
+T18MVT
+T18MVU
+T18MVV
+T18MWA
+T18MWB
+T18MWC
+T18MWD
+T18MWE
+T18MWS
+T18MWT
+T18MWU
+T18MWV
+T18MXA
+T18MXB
+T18MXC
+T18MXD
+T18MXE
+T18MXS
+T18MXT
+T18MXU
+T18MXV
+T18MYA
+T18MYB
+T18MYC
+T18MYD
+T18MYE
+T18MYS
+T18MYT
+T18MYU
+T18MYV
+T18MZA
+T18MZB
+T18MZC
+T18MZD
+T18MZE
+T18MZS
+T18MZT
+T18MZU
+T18MZV
+T18NTF
+T18NTG
+T18NTH
+T18NTJ
+T18NTK
+T18NTL
+T18NTM
+T18NUF
+T18NUG
+T18NUH
+T18NUJ
+T18NUK
+T18NUL
+T18NUM
+T18NVF
+T18NVG
+T18NVH
+T18NVJ
+T18NVK
+T18NVL
+T18NVM
+T18NWF
+T18NWG
+T18NWH
+T18NWJ
+T18NWK
+T18NWL
+T18NWM
+T18NXF
+T18NXG
+T18NXH
+T18NXJ
+T18NXK
+T18NXL
+T18NXM
+T18NYF
+T18NYG
+T18NYH
+T18NYJ
+T18NYK
+T18NYL
+T18NYM
+T18NZF
+T18NZG
+T18NZH
+T18NZJ
+T18NZK
+T18NZL
+T18NZM
+T19LBC
+T19LBD
+T19LBE
+T19LBF
+T19LBG
+T19LBH
+T19LBJ
+T19LBK
+T19LBL
+T19LCC
+T19LCD
+T19LCE
+T19LCF
+T19LCG
+T19LCH
+T19LCJ
+T19LCK
+T19LCL
+T19LDC
+T19LDD
+T19LDE
+T19LDF
+T19LDG
+T19LDH
+T19LDJ
+T19LDK
+T19LDL
+T19LEC
+T19LED
+T19LEE
+T19LEF
+T19LEG
+T19LEH
+T19LEJ
+T19LEK
+T19LEL
+T19LFC
+T19LFD
+T19LFE
+T19LFF
+T19LFG
+T19LFH
+T19LFJ
+T19LFK
+T19LFL
+T19LGC
+T19LGD
+T19LGE
+T19LGF
+T19LGG
+T19LGH
+T19LGJ
+T19LGK
+T19LGL
+T19LHC
+T19LHD
+T19LHE
+T19LHF
+T19LHG
+T19LHH
+T19LHJ
+T19LHK
+T19LHL
+T19MBM
+T19MBN
+T19MBP
+T19MBQ
+T19MBR
+T19MBS
+T19MBT
+T19MBU
+T19MBV
+T19MCM
+T19MCN
+T19MCP
+T19MCQ
+T19MCR
+T19MCS
+T19MCT
+T19MCU
+T19MCV
+T19MDM
+T19MDN
+T19MDP
+T19MDQ
+T19MDR
+T19MDS
+T19MDT
+T19MDU
+T19MDV
+T19MEM
+T19MEN
+T19MEP
+T19MEQ
+T19MER
+T19MES
+T19MET
+T19MEU
+T19MEV
+T19MFM
+T19MFN
+T19MFP
+T19MFQ
+T19MFR
+T19MFS
+T19MFT
+T19MFU
+T19MFV
+T19MGM
+T19MGN
+T19MGP
+T19MGQ
+T19MGR
+T19MGS
+T19MGT
+T19MGU
+T19MGV
+T19MHM
+T19MHN
+T19MHP
+T19MHQ
+T19MHR
+T19MHS
+T19MHT
+T19MHU
+T19MHV
+T19NBA
+T19NBB
+T19NBC
+T19NBD
+T19NBE
+T19NBF
+T19NBG
+T19NCA
+T19NCB
+T19NCC
+T19NCD
+T19NCE
+T19NCF
+T19NCG
+T19NDA
+T19NDB
+T19NDC
+T19NDD
+T19NDE
+T19NDF
+T19NDG
+T19NEA
+T19NEB
+T19NEC
+T19NED
+T19NEE
+T19NEF
+T19NEG
+T19NFA
+T19NFB
+T19NFC
+T19NFD
+T19NFE
+T19NFF
+T19NFG
+T19NGA
+T19NGB
+T19NGC
+T19NGD
+T19NGE
+T19NGF
+T19NGG
+T19NHA
+T19NHB
+T19NHC
+T19NHD
+T19NHE
+T19NHF
+T19NHG
+T20LKH
+T20LKJ
+T20LKK
+T20LKL
+T20LKM
+T20LKN
+T20LKP
+T20LKQ
+T20LKR
+T20LLH
+T20LLJ
+T20LLK
+T20LLL
+T20LLM
+T20LLN
+T20LLP
+T20LLQ
+T20LLR
+T20LMH
+T20LMJ
+T20LMK
+T20LML
+T20LMM
+T20LMN
+T20LMP
+T20LMQ
+T20LMR
+T20LNH
+T20LNJ
+T20LNK
+T20LNL
+T20LNM
+T20LNN
+T20LNP
+T20LNQ
+T20LNR
+T20LPH
+T20LPJ
+T20LPK
+T20LPL
+T20LPM
+T20LPN
+T20LPP
+T20LPQ
+T20LPR
+T20LQH
+T20LQJ
+T20LQK
+T20LQL
+T20LQM
+T20LQN
+T20LQP
+T20LQQ
+T20LQR
+T20LRH
+T20LRJ
+T20LRK
+T20LRL
+T20LRM
+T20LRN
+T20LRP
+T20LRQ
+T20LRR
+T20MKA
+T20MKB
+T20MKC
+T20MKD
+T20MKE
+T20MKS
+T20MKT
+T20MKU
+T20MKV
+T20MLA
+T20MLB
+T20MLC
+T20MLD
+T20MLE
+T20MLS
+T20MLT
+T20MLU
+T20MLV
+T20MMA
+T20MMB
+T20MMC
+T20MMD
+T20MME
+T20MMS
+T20MMT
+T20MMU
+T20MMV
+T20MNA
+T20MNB
+T20MNC
+T20MND
+T20MNE
+T20MNS
+T20MNT
+T20MNU
+T20MNV
+T20MPA
+T20MPB
+T20MPC
+T20MPD
+T20MPE
+T20MPS
+T20MPT
+T20MPU
+T20MPV
+T20MQA
+T20MQB
+T20MQC
+T20MQD
+T20MQE
+T20MQS
+T20MQT
+T20MQU
+T20MQV
+T20MRA
+T20MRB
+T20MRC
+T20MRD
+T20MRE
+T20MRS
+T20MRT
+T20MRU
+T20MRV
+T20NKF
+T20NKG
+T20NKH
+T20NKJ
+T20NKK
+T20NKL
+T20NKM
+T20NLF
+T20NLG
+T20NLH
+T20NLJ
+T20NLK
+T20NLL
+T20NLM
+T20NMF
+T20NMG
+T20NMH
+T20NMJ
+T20NMK
+T20NML
+T20NMM
+T20NNF
+T20NNG
+T20NNH
+T20NNJ
+T20NNK
+T20NNL
+T20NNM
+T20NPF
+T20NPG
+T20NPH
+T20NPJ
+T20NPK
+T20NPL
+T20NPM
+T20NQF
+T20NQG
+T20NQH
+T20NQJ
+T20NQK
+T20NQL
+T20NQM
+T20NRF
+T20NRG
+T20NRH
+T20NRJ
+T20NRK
+T20NRL
+T20NRM
+T21LTC
+T21LTD
+T21LTE
+T21LTF
+T21LTG
+T21LTH
+T21LTJ
+T21LTK
+T21LTL
+T21LUC
+T21LUD
+T21LUE
+T21LUF
+T21LUG
+T21LUH
+T21LUJ
+T21LUK
+T21LUL
+T21LVC
+T21LVD
+T21LVE
+T21LVF
+T21LVG
+T21LVH
+T21LVJ
+T21LVK
+T21LVL
+T21LWC
+T21LWD
+T21LWE
+T21LWF
+T21LWG
+T21LWH
+T21LWJ
+T21LWK
+T21LWL
+T21LXC
+T21LXD
+T21LXE
+T21LXF
+T21LXG
+T21LXH
+T21LXJ
+T21LXK
+T21LXL
+T21LYC
+T21LYD
+T21LYE
+T21LYF
+T21LYG
+T21LYH
+T21LYJ
+T21LYK
+T21LYL
+T21LZC
+T21LZD
+T21LZE
+T21LZF
+T21LZG
+T21LZH
+T21LZJ
+T21LZK
+T21LZL
+T21MTM
+T21MTN
+T21MTP
+T21MTQ
+T21MTR
+T21MTS
+T21MTT
+T21MTU
+T21MTV
+T21MUM
+T21MUN
+T21MUP
+T21MUQ
+T21MUR
+T21MUS
+T21MUT
+T21MUU
+T21MUV
+T21MVM
+T21MVN
+T21MVP
+T21MVQ
+T21MVR
+T21MVS
+T21MVT
+T21MVU
+T21MVV
+T21MWM
+T21MWN
+T21MWP
+T21MWQ
+T21MWR
+T21MWS
+T21MWT
+T21MWU
+T21MWV
+T21MXM
+T21MXN
+T21MXP
+T21MXQ
+T21MXR
+T21MXS
+T21MXT
+T21MXU
+T21MXV
+T21MYM
+T21MYN
+T21MYP
+T21MYQ
+T21MYR
+T21MYS
+T21MYT
+T21MYU
+T21MYV
+T21MZM
+T21MZN
+T21MZP
+T21MZQ
+T21MZR
+T21MZS
+T21MZT
+T21MZU
+T21MZV
+T21NTA
+T21NTB
+T21NTC
+T21NTD
+T21NTE
+T21NTF
+T21NTG
+T21NUA
+T21NUB
+T21NUC
+T21NUD
+T21NUE
+T21NUF
+T21NUG
+T21NVA
+T21NVB
+T21NVC
+T21NVD
+T21NVE
+T21NVF
+T21NVG
+T21NWA
+T21NWB
+T21NWC
+T21NWD
+T21NWE
+T21NWF
+T21NWG
+T21NXA
+T21NXB
+T21NXC
+T21NXD
+T21NXE
+T21NXF
+T21NXG
+T21NYA
+T21NYB
+T21NYC
+T21NYD
+T21NYE
+T21NYF
+T21NYG
+T21NZA
+T21NZB
+T21NZC
+T21NZD
+T21NZE
+T21NZF
+T21NZG
+T22LBH
+T22LBJ
+T22LBK
+T22LBL
+T22LBM
+T22LBN
+T22LBP
+T22LBQ
+T22LBR
+T22LCH
+T22LCJ
+T22LCK
+T22LCL
+T22LCM
+T22LCN
+T22LCP
+T22LCQ
+T22LCR
+T22LDH
+T22LDJ
+T22LDK
+T22LDL
+T22LDM
+T22LDN
+T22LDP
+T22LDQ
+T22LDR
+T22LEH
+T22LEJ
+T22LEK
+T22LEL
+T22LEM
+T22LEN
+T22LEP
+T22LEQ
+T22LER
+T22LFH
+T22LFJ
+T22LFK
+T22LFL
+T22LFM
+T22LFN
+T22LFP
+T22LFQ
+T22LFR
+T22LGH
+T22LGJ
+T22LGK
+T22LGL
+T22LGM
+T22LGN
+T22LGP
+T22LGQ
+T22LGR
+T22LHH
+T22LHJ
+T22LHK
+T22LHL
+T22LHM
+T22LHN
+T22LHP
+T22LHQ
+T22LHR
+T22MBA
+T22MBB
+T22MBC
+T22MBD
+T22MBE
+T22MBS
+T22MBT
+T22MBU
+T22MBV
+T22MCA
+T22MCB
+T22MCC
+T22MCD
+T22MCE
+T22MCS
+T22MCT
+T22MCU
+T22MCV
+T22MDA
+T22MDB
+T22MDC
+T22MDD
+T22MDE
+T22MDS
+T22MDT
+T22MDU
+T22MDV
+T22MEA
+T22MEB
+T22MEC
+T22MED
+T22MEE
+T22MES
+T22MET
+T22MEU
+T22MEV
+T22MFA
+T22MFB
+T22MFC
+T22MFD
+T22MFE
+T22MFS
+T22MFT
+T22MFU
+T22MFV
+T22MGA
+T22MGB
+T22MGC
+T22MGD
+T22MGE
+T22MGS
+T22MGT
+T22MGU
+T22MGV
+T22MHA
+T22MHB
+T22MHC
+T22MHD
+T22MHE
+T22MHS
+T22MHT
+T22MHU
+T22MHV
+T22NBF
+T22NBG
+T22NBH
+T22NBJ
+T22NBK
+T22NBL
+T22NBM
+T22NCF
+T22NCG
+T22NCH
+T22NCJ
+T22NCK
+T22NCL
+T22NCM
+T22NDF
+T22NDG
+T22NDH
+T22NDJ
+T22NDK
+T22NDL
+T22NEF
+T22NEG
+T22NEH
+T22NEJ
+T22NFF
+T22NFG
+T22NFH
+T23LKC
+T23LKD
+T23LKE
+T23LKF
+T23LKG
+T23LKH
+T23LKJ
+T23LKK
+T23LKL
+T23LLC
+T23LLD
+T23LLE
+T23LLF
+T23LLG
+T23LLH
+T23LLJ
+T23LLK
+T23LLL
+T23LMC
+T23LMD
+T23LME
+T23LMF
+T23LMG
+T23LMH
+T23LMJ
+T23LMK
+T23LML
+T23MKM
+T23MKN
+T23MKP
+T23MKQ
+T23MKR
+T23MKS
+T23MKT
+T23MKU
+T23MKV
+T23MLM
+T23MLN
+T23MLP
+T23MLQ
+T23MLR
+T23MLS
+T23MLT
+T23MLU
+T23MLV
+T23MMM
+T23MMN
+T23MMP
+T23MMQ
+T23MMR
+T23MMS
+T23MMT
+T23MMU
diff --git a/hls.py b/hls.py
new file mode 100644
index 0000000000000000000000000000000000000000..f0b7826a477bead60e20ce947e3a3ccb587be50c
--- /dev/null
+++ b/hls.py
@@ -0,0 +1,70 @@
+import os
+import pandas as pd
+import requests
+import rasterio as rio
+import matplotlib.pyplot as plt
+from datetime import datetime
+from shapely.geometry import Polygon
+import xml.etree.ElementTree as ET
+from all_functions import parse_kml_to_tiles
+from all_functions import search_hls_granules_by_tile
+from all_functions import acquisition_download_links_to_csv
+from all_functions import plot_union_polygon
+
+
+
+
+kml_file_path = './hls_tiles.kml'
+output_file_name = "amazon-download-links.csv"
+date_from = "2020-01-01"
+date_to = "2024-12-31"
+cloud_coverage_step = 10
+ifPlot = False
+tile_id_list = list(pd.read_csv("amazon-dlr-tile-ids.csv", header=None)[0])
+total_number_of_tiles = len(tile_id_list)
+# tile_id_list = ["T17LRJ"]
+# tile_id_list = ["T21MYS"]
+tile_index = 0
+if os.path.isfile(output_file_name): os.remove(output_file_name)
+for tile_id in tile_id_list:
+    ifComplete = False
+    tile_index += 1
+    counter_message = f" ({tile_index}/{total_number_of_tiles})."
+    polygon_surface_relative_diff_percent = 100
+    tile_polygon, tile_coords = parse_kml_to_tiles(kml_file_path, target_tile_id=tile_id)
+    # granules = search_hls_granules_by_tile(["HLSL30"], tile_id, date_from, date_to, cloud_coverage_threshold)
+    needed_number_of_acquisitions = 0
+    for cloud_coverage_threshold in range(0,101,cloud_coverage_step):
+        granules = search_hls_granules_by_tile(["HLSL30", "HLSS30"], tile_id, date_from, date_to, cloud_coverage_threshold, cloud_coverage_step)
+        union_polygon = Polygon([])
+        for acquisition in granules:
+            needed_number_of_acquisitions += 1
+            # print(acquisition['title'][15:-5])
+            coord_tmp  = acquisition['polygons'][0][0].split()
+            acquisition_coords = [[float(coord_tmp[i+1]),float(coord_tmp[i])] for i in range(0,int(len(coord_tmp)),2)]
+            acquisition_polygon = Polygon(acquisition_coords)
+            union_polygon = union_polygon.union(acquisition_polygon)
+            union_polygon = tile_polygon.intersection(union_polygon)
+            polygon_surface_relative_diff_percent = (tile_polygon.area - union_polygon.area) / tile_polygon.area*100 
+            if polygon_surface_relative_diff_percent < 1e-1:
+                ifComplete = True
+#                 plot_union_polygon(union_polygon, tile_polygon)
+                break
+        if polygon_surface_relative_diff_percent < 1e-1:
+            status_message = f"{tile_id}, cloud coverage: {cloud_coverage_threshold}, complete in {needed_number_of_acquisitions} acquisitions."
+        else:
+            status_message = f"{tile_id}, cloud coverage: {cloud_coverage_threshold}, incomplete in {needed_number_of_acquisitions} acquisitions."
+        print(status_message, counter_message, end="\r")
+        # if polygon_surface_relative_diff_percent > 1e-1:
+        #     status = f"{tile_id} is incomplete, surface diff: {polygon_surface_relative_diff_percent}%. Number of acquisitions: {len(granules)}."
+        #     if ifPlot:
+        
+        acquisition_download_links_to_csv(tile_id, output_file_name, acquisitions=granules[0:needed_number_of_acquisitions], ifComplete=ifComplete)
+        if ifComplete: 
+            break
+    # break
+
+
+
+
+