tis-microsoft-photos
2022.30120.12007.0-30
Microsoft Photos is a rich media experience that empowers you to do more with your photos and videos
10751 downloads
Download
See build result See VirusTotal scan

Description
- package : tis-microsoft-photos
- name : Microsoft Windows Photos
- version : 2022.30120.12007.0-30
- categories : Utilities,Media
- maintainer : WAPT Team,Tranquil IT,Jimmy Pelé,Pierre Cosson
- installed_size : 209619175
- editor : Microsoft
- licence :
- signature_date : 2023-03-12T00:11:25.181441
- size : 261.75 Mo
- locale : all
- target_os : windows
- impacted_process : Microsoft.Photos
- architecture : all
- Homepage : https://apps.microsoft.com/store/detail/9WZDNCRFJBH4
Control
package : tis-microsoft-photos
version : 2022.30120.12007.0-30
architecture : all
section : base
priority : optional
name : Microsoft Windows Photos
categories : Utilities,Media
maintainer : WAPT Team,Tranquil IT,Jimmy Pelé,Pierre Cosson
description : Microsoft Photos is a rich media experience that empowers you to do more with your photos and videos
depends :
conflicts :
maturity : PROD
locale : all
target_os : windows
min_wapt_version : 2.2
sources : https://apps.microsoft.com/store/detail/9WZDNCRFJBH4
installed_size : 209619175
impacted_process : Microsoft.Photos
description_fr : Microsoft Photos est une expérience multimédia enrichie qui vous permet d'en faire plus avec vos photos et vidéos
description_pl : Microsoft Photos to bogate doświadczenie multimedialne, które pozwala zrobić więcej ze zdjęciami i filmami
description_de : Microsoft Fotos ist ein reichhaltiges Medienerlebnis, das es Ihnen ermöglicht, mehr aus Ihren Fotos und Videos zu machen
description_es : Microsoft Photos es una experiencia multimedia enriquecida que te permite hacer más cosas con tus fotos y vídeos
description_pt : Microsoft Photos é uma experiência multimédia rica que lhe dá poder para fazer mais com as suas fotos e vídeos
description_it : Microsoft Photos è un'esperienza multimediale ricca che consente di fare di più con le foto e i video
description_nl : Microsoft Photos is een rijke media-ervaring waarmee u meer kunt doen met uw foto's en video's
description_ru : Microsoft Photos - это богатый мультимедийный опыт, который позволяет вам делать больше с вашими фотографиями и видео
audit_schedule :
editor : Microsoft
keywords :
licence :
homepage : https://apps.microsoft.com/store/detail/9WZDNCRFJBH4
package_uuid : c598388c-3185-4508-b6e1-a75ca86ba907
valid_from :
valid_until :
forced_install_on :
changelog :
min_os_version : 10.0.17763.0
max_os_version : 10.0.22000.0
icon_sha256sum : 03c7e27fb44ef99dd8440cfd18e881e272766fdc4cedd1c7b2ba09076713d771
signer : Tranquil IT
signer_fingerprint: 8c5127a75392be9cc9afd0dbae1222a673072c308c14d88ab246e23832e8c6bb
signature : aTOGlpz3jghGfQL0dAKKuzR/+xHhVqZGwMeIMnKUt8Uevg6QXkPTBDitg5Q0yW+W42ecQaeefTMpSLI8l4hRhF8HsKkTRRfDilQ7LS7bDt6DW+JIStk5a4dYsZ33vpRl5oHfs25aWgyypVR8VUyT+0gd13FwcjWVzGQKouLANsb01MTHbw60Qk5zrBfTvxRhV9B84QX1dnjHS0eE78gWKUPDhBaNKZFbPsZPoE2Tm3jGQ6AbvDQwG0qap8dWYzVmXu+6gW8GxbYTcBymhI1sv2dl6sLxi/Sg+MpnzIY4FPVhXkucufN7obX4lSmtRwWJykhQPK2WMQQsD2ec6bqybQ==
signature_date : 2023-03-12T00:11:25.181441
signed_attributes : package,version,architecture,section,priority,name,categories,maintainer,description,depends,conflicts,maturity,locale,target_os,min_wapt_version,sources,installed_size,impacted_process,description_fr,description_pl,description_de,description_es,description_pt,description_it,description_nl,description_ru,audit_schedule,editor,keywords,licence,homepage,package_uuid,valid_from,valid_until,forced_install_on,changelog,min_os_version,max_os_version,icon_sha256sum,signer,signer_fingerprint,signature_date,signed_attributes
Setup.py
# -*- coding: utf-8 -*-
from setuphelpers import *
appx_package_name = "Microsoft.Windows.Photos"
appx_dir = makepath(programfiles, "WindowsAppsInstallers")
allow_remove = False
def install():
# Declare local variables
bins_dir = control.package.split("-", 1)[1]
appx_bins_dir = makepath(appx_dir, bins_dir)
# Remove from old path
for appx_file in glob.glob(makepath(appx_dir, "%s_*" % appx_package_name)):
remove_file(appx_file)
# Placing bins for session-setup installs
if isdir(appx_bins_dir):
remove_tree(appx_bins_dir)
mkdirs(appx_bins_dir)
print(f"Creating: {appx_bins_dir}")
for f in glob.glob(bins_dir + "/*"):
filecopyto(f, appx_bins_dir)
for f in glob.glob(appx_bins_dir + "/*"):
if control.architecture == "all":
fname = f.split(os.sep)[-1]
if "x86" in glob.glob(makepath(appx_bins_dir, "%s_*" % appx_package_name))[0].split(os.sep)[-1]:
if not "x86" in fname and not "neutral" in fname:
remove_file(f)
else:
if not get_host_architecture() in fname and not "neutral" in fname:
remove_file(f)
else:
if not control.architecture in fname and not "neutral" in fname:
remove_file(f)
def session_setup():
# Declare local variables
bins_dir = control.package.split("-", 1)[1]
appx_bins_dir = makepath(appx_dir, bins_dir)
bin_path = glob.glob(makepath(appx_bins_dir, f"{appx_package_name}_*"))[0]
dependencies_pathes = ",".join([f'"{a}"' for a in glob.glob(makepath(appx_bins_dir, "*")) if not appx_package_name in a])
# Installing the UWP application in the user environment
appx_version = get_powershell_str("Get-AppxPackage -Name %s" % appx_package_name, "Version")
if not appx_version or Version(appx_version) < Version(control.get_software_version()) or force:
print("Installing: %s" % bin_path.split("\\")[-1])
killalltasks(control.get_impacted_process_list())
add_appx_cmd = f'Add-AppxPackage -Path "{bin_path}"'
if dependencies_pathes:
add_appx_cmd += f" -DependencyPath {dependencies_pathes}"
run_powershell(add_appx_cmd)
else:
print("%s is installed in correct version (%s)" % (appx_package_name, appx_version))
def uninstall():
# Declare local variables
bins_dir = control.package.split("-", 1)[1]
appx_bins_dir = makepath(appx_dir, bins_dir)
if allow_remove:
remove_appx(appx_package_name)
if isdir(appx_bins_dir):
print("Remove: %s" % (appx_bins_dir))
remove_tree(appx_bins_dir)
if dir_is_empty(appx_dir):
print("Remove: %s since it is empty" % (appx_dir))
remove_tree(appx_dir)
def get_host_architecture():
if isARM64():
return "arm64"
elif isARM():
return "arm"
elif is64():
return "x64"
elif is32():
return "x86"
Update_package.py
# -*- coding: utf-8 -*-
from setuphelpers import *
import requests
try:
from setupdevhelpers import *
except:
from bs4 import BeautifulSoup
import waptguihelper
import re
import json
def update_package():
# Declaring local variables
package_updated = False
proxies = get_proxies()
if not proxies:
proxies = get_proxies_from_wapt_console()
store_url = control.sources
if not store_url:
store_id = waptguihelper.input_dialog(
"Choice of app", "Enter the windows store app id (foundable in package url: https://apps.microsoft.com/store/apps)", store_url
).split("/")[-1]
else:
store_id = store_url.split("/")[-1]
store_id = store_id.split("?")[0]
url_ms = "https://apps.microsoft.com/store/detail/%s" % store_id
control.sources = url_ms
control.save_control_to_wapt()
package_prefix = control.package.split("-")[0]
# check setup.py incase the package name doesnt match the installer file
appx_package_name = ""
with open("setup.py", "r", encoding="utf8") as f:
for line in f.readlines():
if line.startswith("appx_package_name"):
appx_package_name = line.split("=")[1].split('"')[1]
break
# Getting info from adguard api
res = requests.post(
"https://store.rg-adguard.net/api/GetFiles",
"type=ProductId&url=%s&ring=RP&lang=fr-FR" % store_id,
headers={"content-type": "application/x-www-form-urlencoded"},
proxies=proxies,
)
all_files = []
page = BeautifulSoup.BeautifulSoup(res.content, features="html.parser")
for bs_search in page.find_all("a"):
if not "BlockMap" in bs_search.text and not "eappxbundle" in bs_search.text and not "emsixbundle" in bs_search.text:
version = bs_search.text.split("_")[1]
bin_name = bs_search.text.replace("~", "_")
download_url = bs_search["href"]
pkg_splitted = re.split(r"_\d+\.", bin_name)[0]
package_name = package_prefix + "-" + pkg_splitted.split("_")[0].replace(".", "-").lower()
software_name = bin_name.split("_")[0].replace("-", " ").replace(".", " ")
package_arch = get_uwp_filename_arch(bin_name, appx_package_name)
file_dict = {
"version": version,
"bin_name": bin_name,
"package_name": package_name,
"software_name": software_name,
"package_arch": package_arch,
"download_url": download_url,
}
all_files.append(file_dict)
if (
"template-microsoft-store" in control.package
or not appx_package_name
or not len([a for a in all_files if appx_package_name in a["bin_name"]]) != 0
):
if not all_files:
error("API returned an empty list, please try again")
selected = waptguihelper.grid_dialog(
"Please select the proper file",
json.dumps(all_files),
waptguihelper.GRT_SELECTED,
'{"columns":[{"propertyname":"version","datatype":"String","required":false,"readonly":false,"width":130},{"propertyname":"bin_name","datatype":"String","required":false,"readonly":false,"width":420},{"propertyname":"package_name","datatype":"String","required":false,"readonly":false,"width":190},{"propertyname":"software_name","datatype":"String","required":false,"readonly":false,"width":172},{"propertyname":"package_arch","datatype":"String","required":false,"readonly":false,"width":88},{"propertyname":"download_url","datatype":"String","required":false,"readonly":false,"width":1472}]}',
)
appx_package_name = selected[0]["bin_name"].split("_")[0]
# Downloading files
for dependency in all_files:
latest_bin = dependency["bin_name"]
download_url = dependency["download_url"]
if download_url.split("/")[2].endswith("microsoft.com"):
if not isfile(latest_bin):
print("Downloading: %s" % latest_bin)
wget(download_url, latest_bin, proxies=proxies)
else:
print("Binary is present: %s" % latest_bin)
else:
error("ERROR: The retrieved URL will not download from microsoft's servers")
# Import xmltodict for make_uwp_app_dict()
if not isfile("xmltodict.py"):
pip_download_xmltodict = "waptpython -m pip download xmltodict -d %s" % basedir
if proxies:
pip_download_xmltodict += " --proxy %s" % proxies["http"]
run(pip_download_xmltodict)
unzip(glob.glob("*.whl")[0], ".", "xmltodict.py")
remove_file(glob.glob("*.whl")[0])
import sys
sys.path.append(basedir)
# Keep app files
uwp_app_dict = make_uwp_app_dict(appx_package_name)
newer_version = "0"
for uwp_app in uwp_app_dict:
if uwp_app_dict[uwp_app]["Name"] != appx_package_name or uwp_app_dict[uwp_app]["TargetDeviceFamily"] != "Windows.Desktop":
continue
if Version(newer_version) < Version(uwp_app_dict[uwp_app]["Version"]):
if control.max_os_version:
if not Version(uwp_app_dict[uwp_app]["MinVersion"], 4) < Version(control.max_os_version, 4):
continue
newer_uwp_app = uwp_app_dict[uwp_app]
newer_version = newer_uwp_app["Version"]
version = newer_uwp_app["Version"]
# Get icon.png
if "b4:Dependencies" in newer_uwp_app:
unzip(newer_uwp_app["FileName"], ".", newer_uwp_app["b4:Dependencies"][0]["FileName"], False)
icon_png = unzip(newer_uwp_app["b4:Dependencies"][0]["FileName"], ".", "*.targetsize-48.png", False)
shutil.move(icon_png[0], "WAPT\\icon.png")
else:
icon_png = unzip(newer_uwp_app["FileName"], ".", "*.targetsize-48.png", False)
shutil.move(icon_png[0], "WAPT\\icon.png")
[remove_file(a) for a in glob.glob("*.png")]
# Placing binaries in a dir ["appxbundle", "msixbundle", "appx", "msix]
bins_dir = control.package.split("-", 1)[1]
if isdir(bins_dir):
remove_tree(bins_dir)
mkdirs(bins_dir)
if not isfile(makepath(bins_dir, newer_uwp_app["FileName"])):
shutil.move(newer_uwp_app["FileName"], bins_dir)
for l in [glob.glob(a["Name"] + "_*") for a in uwp_app_dict[newer_uwp_app["FileName"]]["Dependencies"]]:
for f in l:
if not isfile(makepath(bins_dir, f)):
shutil.move(f, bins_dir)
# Removing remaining files ["appxbundle", "msixbundle", "appx", "msix]
for f in glob.glob("*.appxbundle") + glob.glob("*.msixbundle") + glob.glob("*.appx") + glob.glob("*.msix"):
remove_file(f)
# No dependencies since it will be contained
control.depends = ""
control.save_control_to_wapt()
# Applying or asking control information if needed
control.architecture = get_uwp_filename_arch(newer_uwp_app["FileName"], appx_package_name)
control.min_os_version = newer_uwp_app["MinVersion"]
if (
control.max_os_version
and Version(newer_uwp_app["MinVersion"], 4) <= Version("10.0.22000", 4)
and Version(newer_uwp_app["MaxVersionTested"], 4) <= Version("10.0.22000", 4)
):
control.max_os_version = newer_uwp_app["MaxVersionTested"]
else:
control.max_os_version = ""
ask_control_categories()
ask_control_package(package_name, "template-microsoft-store", remove_base_files=True)
ask_control_name(software_name, "Template Microsoft Store")
ask_control_description("update_package")
# Changing setup.py appx_package_name variable
new_lines = []
with open("setup.py", "r", encoding="utf8") as f:
for line in f.readlines():
if line.startswith("appx_package_name"):
line = 'appx_package_name = "%s"\n' % appx_package_name
new_lines.append(line)
with open("setup.py", "w", encoding="utf8") as f:
f.writelines(new_lines)
# Changing version of the package
if Version(version) > Version(control.get_software_version()):
print("Software version updated (from: %s to: %s)" % (control.get_software_version(), Version(version)))
package_updated = True
else:
print("Software version up-to-date (%s)" % Version(version))
control.set_software_version(version)
control.save_control_to_wapt()
# Validating or not update-package-sources
return package_updated
def make_uwp_app_dict(appx_package_name):
import xmltodict
ms_app_db = {}
# for ms_app_file in (
# glob.glob("*.appxbundle")
# + glob.glob("*.msixbundle")
# + glob.glob("*.appx")
# + glob.glob("*.msix")
# ):
for ms_app_file in (
glob.glob(f"{appx_package_name}*.appxbundle")
+ glob.glob(f"{appx_package_name}*.msixbundle")
+ glob.glob(f"{appx_package_name}*.appx")
+ glob.glob(f"{appx_package_name}*.msix")
):
manifest = unzip(ms_app_file, ".", "AppxManifest.xml", False)
bundle_manifest = unzip(ms_app_file, ".", "AppxMetadata\AppxBundleManifest.xml", False)
if not manifest:
before_dependencies = []
if bundle_manifest:
with open(bundle_manifest[0], encoding="utf8") as xml_file:
data_dict = xmltodict.parse(xml_file.read(), attr_prefix="")
ms_app_info = {
"FileName": ms_app_file,
"Name": data_dict["Bundle"]["Identity"]["Name"],
"Version": data_dict["Bundle"]["Identity"]["Version"],
}
for app_pkg in data_dict["Bundle"]["Packages"]["Package"]:
if app_pkg["Type"] == "application":
if not "b4:Dependencies" in app_pkg:
ms_app_info.update({"TargetDeviceFamily": None})
before_dependency_info = {
"FileName": app_pkg["FileName"],
"Version": app_pkg["Version"],
"Architecture": app_pkg["Architecture"],
# "MinVersion": app_pkg["b4:Dependencies"]["b4:TargetDeviceFamily"]["MinVersion"],
# "MaxVersionTested": app_pkg["b4:Dependencies"]["b4:TargetDeviceFamily"]["MaxVersionTested"],
}
before_dependencies.append(before_dependency_info)
# ms_app_info.update(
# {"MinVersion": before_dependency_info["MinVersion"], "MaxVersionTested": before_dependency_info["MaxVersionTested"]}
# )
continue
else:
if not "b4:TargetDeviceFamily" in app_pkg["b4:Dependencies"]:
ms_app_info.update({"TargetDeviceFamily": None})
continue
else:
if type(app_pkg["b4:Dependencies"]["b4:TargetDeviceFamily"]) == list:
if not "Windows.Desktop" in app_pkg["b4:Dependencies"]["b4:TargetDeviceFamily"]:
ms_app_info.update(
{
"TargetDeviceFamily": app_pkg["b4:Dependencies"]["b4:TargetDeviceFamily"][0]["Name"],
"MinVersion": app_pkg["b4:Dependencies"]["b4:TargetDeviceFamily"][0]["MinVersion"],
"MaxVersionTested": app_pkg["b4:Dependencies"]["b4:TargetDeviceFamily"][0]["MaxVersionTested"],
}
)
continue
else:
app_pkg["b4:Dependencies"]["b4:TargetDeviceFamily"] = [
a for a in app_pkg["b4:Dependencies"]["b4:TargetDeviceFamily"] if a["Name"] == "Windows.Desktop"
][0]
ms_app_info.update(
{
"TargetDeviceFamily": before_dependency_info["TargetDeviceFamily"]["Name"],
"MinVersion": before_dependency_info["MinVersion"],
"MaxVersionTested": before_dependency_info["MaxVersionTested"],
}
)
before_dependency_info = {
"FileName": app_pkg["FileName"],
"Version": app_pkg["Version"],
"Architecture": app_pkg["Architecture"],
"TargetDeviceFamily": app_pkg["b4:Dependencies"]["b4:TargetDeviceFamily"]["Name"],
"MinVersion": app_pkg["b4:Dependencies"]["b4:TargetDeviceFamily"]["MinVersion"],
"MaxVersionTested": app_pkg["b4:Dependencies"]["b4:TargetDeviceFamily"]["MaxVersionTested"],
}
before_dependencies.append(before_dependency_info)
ms_app_info.update(
{
"TargetDeviceFamily": before_dependency_info["TargetDeviceFamily"],
"MinVersion": before_dependency_info["MinVersion"],
"MaxVersionTested": before_dependency_info["MaxVersionTested"],
}
)
if before_dependencies:
for dependency in before_dependencies:
unzip(
ms_app_file,
".",
makepath(
dependency["FileName"],
),
False,
)
manifest = unzip(dependency["FileName"], ".", makepath("AppxManifest.xml"), False)
if isfile(dependency["FileName"]):
remove_file(dependency["FileName"])
with open(manifest[0], encoding="utf8") as xml_file:
dependency_data_dict = xmltodict.parse(xml_file.read(), attr_prefix="")
sub_dependencies = []
for sub_app_pkg in dependency_data_dict["Package"]["Dependencies"]["PackageDependency"]:
sub_dependency_info = {
"Name": sub_app_pkg["Name"],
"MinVersion": sub_app_pkg["MinVersion"],
}
sub_dependencies.append(sub_dependency_info)
ms_app_info["b4:Dependencies"] = before_dependencies
ms_app_info["Dependencies"] = sub_dependencies
ms_app_info.update(
{
"TargetDeviceFamily": dependency_data_dict["Package"]["Dependencies"]["TargetDeviceFamily"]["Name"],
"MinVersion": dependency_data_dict["Package"]["Dependencies"]["TargetDeviceFamily"]["MinVersion"],
"MaxVersionTested": dependency_data_dict["Package"]["Dependencies"]["TargetDeviceFamily"]["MaxVersionTested"],
}
)
ms_app_db[ms_app_file] = ms_app_info
else:
error("nothing to parse")
else:
manifest = unzip(ms_app_file, ".", makepath("AppxManifest.xml"), False)
with open(manifest[0], encoding="utf8") as xml_file:
simple_data_dict = xmltodict.parse(xml_file.read(), attr_prefix="")
simple_dependencies = []
for key, value in simple_data_dict["Package"]["Dependencies"].items():
if key == "PackageDependency":
for simple_dependency in value:
simple_dependency_info = {
"Name": simple_dependency["Name"],
"MinVersion": simple_dependency["MinVersion"],
}
simple_dependencies.append(simple_dependency_info)
if key == "TargetDeviceFamily":
simple_ms_app_info = {
"FileName": ms_app_file,
"Name": simple_data_dict["Package"]["Identity"]["Name"],
"Version": simple_data_dict["Package"]["Identity"]["Version"],
"Architecture": simple_data_dict["Package"]["Identity"]["ProcessorArchitecture"],
"TargetDeviceFamily": value["Name"],
"MinVersion": value["MinVersion"],
"MaxVersionTested": value["MaxVersionTested"],
}
simple_ms_app_info["Dependencies"] = simple_dependencies
ms_app_db[ms_app_file] = simple_ms_app_info
for xml_file in glob.glob("AppxManifest.xml") + glob.glob("AppxBundleManifest.xml"):
remove_file(xml_file)
return ms_app_db
def get_uwp_filename_arch(appx_filename, appx_package_name=None):
if not appx_package_name:
appx_package_name = None
if "arm64" in appx_filename:
return "arm64"
elif "arm" in appx_filename:
return "arm"
elif "x64" in appx_filename:
return "x64"
if appx_filename is not None and "x86" in appx_filename and (appx_package_name is None or not appx_package_name in appx_filename):
return "x86"
else:
return "all"
def ask_control_description(blank_str=None):
"""Requesting that the user supply package description for the control.description field
Args:
blank_str (str): The description will be cleared if it includes the specified string to avoid using the template description (default: do not clear description)
"""
if not control.description:
control.description = waptguihelper.input_dialog("Description", "Please fill the description", control.description)
control.save_control_to_wapt()
if blank_str is not None and blank_str in control.description:
control.description = ""
control.save_control_to_wapt()
return control.description
def ask_control_categories():
"""Requesting that the user supply package categories for the control.categories field if empty or Template is selected"""
if control.categories == "" or control.categories == "Template":
categories = waptguihelper.grid_dialog(
"Select package categories",
[
"Internet",
"Utilities",
"Messaging",
"Security",
"System and network",
"Media",
"Development",
"Office",
"Drivers",
"Education",
"Configuration",
"CAD",
"Template",
"Dependency",
"Extension",
],
waptguihelper.GRT_SELECTED,
)
if categories:
control.categories = ",".join([a["unknown"] for a in categories])
else:
control.categories = ""
control.save_control_to_wapt()
return control.categories
def ask_control_package(control_package=control.package, conditionnal_package_name=None, remove_base_files=False):
"""Requesting that the user provide a package name to be entered into the control.package field, and offering the possibility of removing the base files (icon.png and changelog.txt) for template package usage
Args:
control_package (str) : prefilled control_package (default: actual control_package)
conditionnal_package_name (str) : only ask when the control.package contains conditionnal_package_name (default: always ask for control_package)
remove_base_files (bool) : removes base files if parameter is True and conditionnal_package_name is provided (default: False)
"""
if conditionnal_package_name is None or conditionnal_package_name in control.package:
control.package = waptguihelper.input_dialog(
control.package,
"You can redefine the package name",
control_package.replace(conditionnal_package_name, "") if conditionnal_package_name is not None else control_package,
)
control.save_control_to_wapt()
# Removing template files
if conditionnal_package_name in control.package and remove_base_files:
if isfile("WAPT\\changelog.txt"):
remove_file("WAPT\\changelog.txt")
if isfile("WAPT\\icon.png"):
remove_file("WAPT\\icon.png")
return control.package
def ask_control_name(control_name=control.name, conditionnal_package_name=None):
"""Requesting that the user provide a package name to be entered into control.name field
Args:
control_name (str) : prefilled control_name (default: control.name)
conditionnal_package_name (str) : only ask when the control.name contains conditionnal_package_name (default: always ask for control_name)
"""
if conditionnal_package_name is None or conditionnal_package_name in control.name:
control.name = waptguihelper.input_dialog(control.name, "You can redefine the name for the self-service", control_name)
control.save_control_to_wapt()
return control.name
886d1b992f92fa8c1749fb4ff8314d15968221b3c3202930e41e49d8e1b0c748 : setup.py
78e281766b684f9e3669ca36c2627718ac2ef7120febc743984cc7df16a285e0 : update_package.py
47de27af62a9a31d123a522c4a74056b8a10d15307de9ebead0adf684f3df45d : microsoft-photos/Microsoft.NET.Native.Runtime.2.2_2.2.28604.0_arm64__8wekyb3d8bbwe.appx
b33c87d60a9c868ec239b7e6a62575151628f29f45e4307ef4a17298dc185008 : microsoft-photos/Microsoft.NET.Native.Framework.2.2_2.2.29512.0_arm64__8wekyb3d8bbwe.appx
114bbf6617820e7c9bb4f332dbd8c3bb3faf273f5da5d347219b07d3824ee672 : microsoft-photos/Microsoft.UI.Xaml.2.7_7.2208.15002.0_arm64__8wekyb3d8bbwe.appx
009f7db134c6061fe8f260e075374a28abbbc44e6cf23de107f93ec8b8c59816 : microsoft-photos/Microsoft.VCLibs.140.00_14.0.30704.0_x64__8wekyb3d8bbwe.appx
e4c5dff287b59e27eb9da6ccd02ed1c76d3f6001eceb0f20e71eebd507b3aad2 : microsoft-photos/Microsoft.NET.Native.Framework.2.2_2.2.29512.0_x86__8wekyb3d8bbwe.appx
397b610554d67abaddfdc287ced6a9bf1ada4d4c9ddf53e01c6a061bed2860ef : microsoft-photos/Microsoft.VCLibs.140.00_14.0.30704.0_x86__8wekyb3d8bbwe.appx
7ccf4ef1815d479570fdcf4e462bd7d80f1bc9ae3c39c93220fdb40cc0ebaca9 : microsoft-photos/Microsoft.NET.Native.Runtime.2.2_2.2.28604.0_arm__8wekyb3d8bbwe.appx
ec7e811dca0cb511c69859c65aa1d94ccd5cc3cab3ec7f9d6bab95abb03149a8 : microsoft-photos/Microsoft.NET.Native.Runtime.2.2_2.2.28604.0_x86__8wekyb3d8bbwe.appx
27fae660d8c609e020703bb463b6601e62811dc75db19975bcb7d68d959b527d : microsoft-photos/Microsoft.NET.Native.Runtime.2.2_2.2.28604.0_x64__8wekyb3d8bbwe.appx
a9e511ff763091b098a932761288c44871dab527f4a429087245295a551d0540 : microsoft-photos/Microsoft.VCLibs.140.00_14.0.30704.0_arm__8wekyb3d8bbwe.appx
5a809587e9ddfb0000e4fd6124b8ed18ce4dd1ed111c7c970ea366f9d8129db9 : microsoft-photos/Microsoft.UI.Xaml.2.7_7.2208.15002.0_x86__8wekyb3d8bbwe.appx
c195047f4af9c3ff3d92c40e55a901cf7cfa08a679b8ca2543bb104bab2f7ff1 : microsoft-photos/Microsoft.NET.Native.Framework.2.2_2.2.29512.0_x64__8wekyb3d8bbwe.appx
68fedbc44ad44586639a75edd0f6fe927acb0acc104ec3d4d8cefda7407eaa09 : microsoft-photos/Microsoft.Windows.Photos_2022.30120.12007.0_neutral___8wekyb3d8bbwe.appxbundle
4ab54162efffe26e605c5ec6170de76d72d8f78983c7fc84427630b951402973 : microsoft-photos/Microsoft.VCLibs.140.00_14.0.30704.0_arm64__8wekyb3d8bbwe.appx
efa0b1396a134a654c41bd9f4b9f084a5dfe19ad6d492cd99313b0b898a0767f : microsoft-photos/Microsoft.UI.Xaml.2.7_7.2208.15002.0_x64__8wekyb3d8bbwe.appx
123af7a74e14cb3cf1b4cd794d59a48b44b9808589b2c8fb5ba810fcff176f5f : microsoft-photos/Microsoft.UI.Xaml.2.7_7.2208.15002.0_arm__8wekyb3d8bbwe.appx
bdf9c70e4966a4f7ce00ca7fc5179962239514be879f2aa3c1794076b7ff9bc6 : microsoft-photos/Microsoft.NET.Native.Framework.2.2_2.2.29512.0_arm__8wekyb3d8bbwe.appx
03c7e27fb44ef99dd8440cfd18e881e272766fdc4cedd1c7b2ba09076713d771 : WAPT/icon.png
a5a97261381e1d0ad46ee15916abec9c2631d0201f5cc50ceb0197a165a0bbbf : WAPT/certificate.crt
e712d620a57e4b288ea3c1b07e153a15c0e2736e82cd1bf5551c38873304dcbf : WAPT/changelog.txt
578a76d3737a2c01d93156df140189e8e3dab03ba5e8c02746bc515a7200fd0a : xmltodict.py
8b41df3916d721a7a9f920992e7c4b8f092628f13dfb1cc2ec980ed1b0a94163 : luti.json
ed03016e088994f398284616615f81ac491b01dd721bc7520347f5c562524089 : WAPT/control