From 1a7eb496e1764d2d4c3a8bf2a1a4d38f96f04b23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=BE?= Date: Wed, 23 Apr 2025 15:37:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=88=91=E7=9A=84=E5=88=97=E8=A1=A8=E5=BC=80?= =?UTF-8?q?=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Thimra/Base/Extension/UIColor+SPAdd.swift | 4 + .../Controller/SPAllShortViewController.swift | 3 + .../SPCollectListViewController.swift | 28 +++- .../SPMyListChildViewController.swift | 2 +- .../Controller/SPMyListViewController.swift | 62 ++++++--- .../SPPlayHistoryViewController.swift | 13 +- .../Class/MyList/View/SPCollectListCell.swift | 47 ++++--- .../Class/MyList/View/SPPlayHistoryCell.swift | 127 ++++++++++++++++++ .../Contents.json | 4 +- .../icon/cancel_icon_01.imageset/Frame@2x.png | Bin 0 -> 295 bytes .../icon/cancel_icon_01.imageset/Frame@3x.png | Bin 0 -> 377 bytes .../check_icon_01.imageset/组件 67 – 2@2x.png | Bin 764 -> 0 bytes .../check_icon_01.imageset/组件 67 – 2@3x.png | Bin 1415 -> 0 bytes .../组件 67 – 9@2x.png | Bin 1093 -> 0 bytes .../组件 67 – 9@3x.png | Bin 1961 -> 0 bytes .../Contents.json | 4 +- .../collect_icon_02.imageset/Frame@2x.png | Bin 0 -> 685 bytes .../collect_icon_02.imageset/Frame@3x.png | Bin 0 -> 1012 bytes .../Contents.json | 22 +++ .../Frame@2x.png | Bin 0 -> 741 bytes .../Frame@3x.png | Bin 0 -> 1038 bytes .../delete_icon_01.imageset/Contents.json | 4 +- .../icon/delete_icon_01.imageset/Frame@2x.png | Bin 0 -> 371 bytes .../icon/delete_icon_01.imageset/Frame@3x.png | Bin 0 -> 492 bytes .../delete_icon_01.imageset/delet-选中@2x.png | Bin 871 -> 0 bytes .../delete_icon_01.imageset/delet-选中@3x.png | Bin 1634 -> 0 bytes .../delete_icon_04.imageset/Contents.json | 22 +++ .../icon/delete_icon_04.imageset/Frame@2x.png | Bin 0 -> 658 bytes .../icon/delete_icon_04.imageset/Frame@3x.png | Bin 0 -> 954 bytes Thimra/Source/en.lproj/Localizable.strings | 5 +- 30 files changed, 289 insertions(+), 58 deletions(-) create mode 100644 Thimra/Class/MyList/View/SPPlayHistoryCell.swift rename Thimra/Source/Assets.xcassets/icon/{check_icon_01.imageset => cancel_icon_01.imageset}/Contents.json (75%) create mode 100644 Thimra/Source/Assets.xcassets/icon/cancel_icon_01.imageset/Frame@2x.png create mode 100644 Thimra/Source/Assets.xcassets/icon/cancel_icon_01.imageset/Frame@3x.png delete mode 100644 Thimra/Source/Assets.xcassets/icon/check_icon_01.imageset/组件 67 – 2@2x.png delete mode 100644 Thimra/Source/Assets.xcassets/icon/check_icon_01.imageset/组件 67 – 2@3x.png delete mode 100644 Thimra/Source/Assets.xcassets/icon/check_icon_01_selected.imageset/组件 67 – 9@2x.png delete mode 100644 Thimra/Source/Assets.xcassets/icon/check_icon_01_selected.imageset/组件 67 – 9@3x.png rename Thimra/Source/Assets.xcassets/icon/{check_icon_01_selected.imageset => collect_icon_02.imageset}/Contents.json (75%) create mode 100644 Thimra/Source/Assets.xcassets/icon/collect_icon_02.imageset/Frame@2x.png create mode 100644 Thimra/Source/Assets.xcassets/icon/collect_icon_02.imageset/Frame@3x.png create mode 100644 Thimra/Source/Assets.xcassets/icon/collect_icon_02_selected.imageset/Contents.json create mode 100644 Thimra/Source/Assets.xcassets/icon/collect_icon_02_selected.imageset/Frame@2x.png create mode 100644 Thimra/Source/Assets.xcassets/icon/collect_icon_02_selected.imageset/Frame@3x.png create mode 100644 Thimra/Source/Assets.xcassets/icon/delete_icon_01.imageset/Frame@2x.png create mode 100644 Thimra/Source/Assets.xcassets/icon/delete_icon_01.imageset/Frame@3x.png delete mode 100644 Thimra/Source/Assets.xcassets/icon/delete_icon_01.imageset/delet-选中@2x.png delete mode 100644 Thimra/Source/Assets.xcassets/icon/delete_icon_01.imageset/delet-选中@3x.png create mode 100644 Thimra/Source/Assets.xcassets/icon/delete_icon_04.imageset/Contents.json create mode 100644 Thimra/Source/Assets.xcassets/icon/delete_icon_04.imageset/Frame@2x.png create mode 100644 Thimra/Source/Assets.xcassets/icon/delete_icon_04.imageset/Frame@3x.png diff --git a/Thimra/Base/Extension/UIColor+SPAdd.swift b/Thimra/Base/Extension/UIColor+SPAdd.swift index 4cc8611..5738bc1 100644 --- a/Thimra/Base/Extension/UIColor+SPAdd.swift +++ b/Thimra/Base/Extension/UIColor+SPAdd.swift @@ -176,5 +176,9 @@ extension UIColor { static func colorCCCCCC(alpha: CGFloat = 1) -> UIColor { return color(hex: 0xCCCCCC, alpha: alpha) } + + static func color6D7A8F(alpha: CGFloat = 1) -> UIColor { + return color(hex: 0x6D7A8F, alpha: alpha) + } } diff --git a/Thimra/Class/Explore/Controller/SPAllShortViewController.swift b/Thimra/Class/Explore/Controller/SPAllShortViewController.swift index a74b275..2c7114e 100644 --- a/Thimra/Class/Explore/Controller/SPAllShortViewController.swift +++ b/Thimra/Class/Explore/Controller/SPAllShortViewController.swift @@ -143,6 +143,9 @@ extension SPAllShortViewController: UICollectionViewDelegate, UICollectionViewDa func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { let model = dataArr[indexPath.row] + let vc = SPPlayerDetailViewController() + vc.shortPlayId = model.short_play_id + self.navigationController?.pushViewController(vc, animated: true) } } diff --git a/Thimra/Class/MyList/Controller/SPCollectListViewController.swift b/Thimra/Class/MyList/Controller/SPCollectListViewController.swift index 8fa5b8e..57654a5 100644 --- a/Thimra/Class/MyList/Controller/SPCollectListViewController.swift +++ b/Thimra/Class/MyList/Controller/SPCollectListViewController.swift @@ -17,14 +17,14 @@ class SPCollectListViewController: SPMyListChildViewController { //MARK: UI属性 private lazy var collectionViewLayout: UICollectionViewFlowLayout = { - let itemWidth = floor((kSPScreenWidth - 30 - 9 * 2) / 3) - let itemHeight = 146 / 109 * itemWidth + 36 + let itemWidth = floor((kSPScreenWidth - 32 - 8 * 2) / 3) + let itemHeight = 145 / 109 * itemWidth + 36 let layout = UICollectionViewFlowLayout() layout.itemSize = .init(width: itemWidth, height: itemHeight) - layout.minimumLineSpacing = 10 - layout.minimumInteritemSpacing = 9 - layout.sectionInset = .init(top: 0, left: 15, bottom: 0, right: 15) + layout.minimumLineSpacing = 18 + layout.minimumInteritemSpacing = 8 + layout.sectionInset = .init(top: 0, left: 16, bottom: 0, right: 16) return layout }() @@ -132,6 +132,11 @@ extension SPCollectListViewController: UICollectionViewDelegate, UICollectionVie let cell = SPCollectListCell.dequeueReusableCell(collectionView: collectionView, indexPath: indexPath) cell.sp_isEditing = self.sp_isEditing cell.model = dataArr[indexPath.row] + cell.clickDeleteButton = { [weak self] cell in + guard let self = self else { return } + guard let indexPath = self.collectionView.indexPath(for: cell) else { return } + self.deleteShort(indexPath: indexPath) + } return cell } @@ -164,6 +169,19 @@ extension SPCollectListViewController: UICollectionViewDelegate, UICollectionVie } } + + func deleteShort(indexPath: IndexPath) { + let model = self.dataArr[indexPath.row] + guard let id = model.short_play_id else { return } + + + SPVideoAPI.requestCollectShort(isCollect: false, shortPlayId: id, videoId: nil) { [weak self] in + guard let self = self else { return } + self.requestDataList(page: 1, completer: nil) + } + + } + } extension SPCollectListViewController { diff --git a/Thimra/Class/MyList/Controller/SPMyListChildViewController.swift b/Thimra/Class/MyList/Controller/SPMyListChildViewController.swift index 446cc35..b8f6c33 100644 --- a/Thimra/Class/MyList/Controller/SPMyListChildViewController.swift +++ b/Thimra/Class/MyList/Controller/SPMyListChildViewController.swift @@ -11,7 +11,7 @@ class SPMyListChildViewController: SPViewController { var sp_isEditing = false { didSet { - deleteButton.isHidden = !sp_isEditing +// deleteButton.isHidden = !sp_isEditing if sp_isEditing { self.view.bringSubviewToFront(deleteButton) } diff --git a/Thimra/Class/MyList/Controller/SPMyListViewController.swift b/Thimra/Class/MyList/Controller/SPMyListViewController.swift index b9fd219..1ac10ff 100644 --- a/Thimra/Class/MyList/Controller/SPMyListViewController.swift +++ b/Thimra/Class/MyList/Controller/SPMyListViewController.swift @@ -10,7 +10,7 @@ import UIKit class SPMyListViewController: SPViewController { - private lazy var titles = ["Follow List".localized, "Play List".localized] + private lazy var titles = ["Watch list".localized, "Recently viewed".localized] private lazy var viewControllers: [SPMyListChildViewController] = { let vc1 = SPCollectListViewController() @@ -50,18 +50,18 @@ class SPMyListViewController: SPViewController { let pageView = JYPageController() pageView.delegate = self pageView.dataSource = self - pageView.config.indicatorWidth = 20 - pageView.config.indicatorHeight = 4 - pageView.config.indicatorCornerRadius = 2 - pageView.config.indicatorColor = .colorFFFFFF(alpha: 0.9) - pageView.config.selectedTitleColor = .colorFFFFFF(alpha: 0.9) +// pageView.config.indicatorWidth = 20 + pageView.config.indicatorHeight = 2 + pageView.config.indicatorCornerRadius = 0 + pageView.config.indicatorColor = .colorFF0000() + pageView.config.selectedTitleColor = .colorFFFFFF() pageView.config.selectedTitleFont = 16 pageView.config.selectedTitleFontWeight = .medium - pageView.config.normalTitleColor = .color888888() - pageView.config.normalTitleFont = 15 - pageView.config.normalTitleFontWeight = .regular - pageView.config.leftPadding = 15 - pageView.config.itemsMargin = 40 + pageView.config.normalTitleColor = .colorA8A5AA() + pageView.config.normalTitleFont = 16 + pageView.config.normalTitleFontWeight = .medium + pageView.config.leftPadding = 16 + pageView.config.itemsMargin = 22 return pageView }() @@ -74,9 +74,10 @@ class SPMyListViewController: SPViewController { private lazy var cancelButton: UIButton = { let button = UIButton(type: .custom) - button.setTitle("Cancel".localized, for: .normal) - button.setTitleColor(.colorFFFFFF(alpha: 0.9), for: .normal) - button.titleLabel?.font = .fontRegular(ofSize: 15) +// button.setTitle("Cancel".localized, for: .normal) + button.setImage(UIImage(named: "cancel_icon_01"), for: .normal) +// button.setTitleColor(.colorFFFFFF(alpha: 0.9), for: .normal) +// button.titleLabel?.font = .fontRegular(ofSize: 15) button.addTarget(self, action: #selector(handleCancelButton), for: .touchUpInside) button.isHidden = true return button @@ -98,6 +99,12 @@ class SPMyListViewController: SPViewController { return button }() + private lazy var lineView: UIView = { + let view = UIView() + view.backgroundColor = .color5A5C67() + return view + }() + override func viewDidLoad() { super.viewDidLoad() @@ -112,7 +119,9 @@ class SPMyListViewController: SPViewController { override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) - self.sp_isEditing = false + if self.sp_isEditing { + self.sp_isEditing = false + } } @objc private func handleEditButton() { @@ -136,10 +145,18 @@ class SPMyListViewController: SPViewController { extension SPMyListViewController { private func _setupUI() { addChild(pageView) + + view.addSubview(lineView) view.addSubview(pageView.view) view.addSubview(editButton) view.addSubview(cancelButton) - view.addSubview(allSelectedButton) +// view.addSubview(allSelectedButton) + + lineView.snp.makeConstraints { make in + make.left.right.equalToSuperview() + make.height.equalTo(1) + make.top.equalToSuperview().offset(kSPStatusbarHeight + 10 + 34) + } pageView.view.snp.makeConstraints { make in make.edges.equalToSuperview() @@ -153,14 +170,15 @@ extension SPMyListViewController { } cancelButton.snp.makeConstraints { make in - make.top.bottom.equalTo(editButton) - make.right.equalTo(editButton) + make.edges.equalTo(editButton) +// make.top.bottom.equalTo(editButton) +// make.right.equalTo(editButton) } - allSelectedButton.snp.makeConstraints { make in - make.left.equalToSuperview().offset(15) - make.top.bottom.equalTo(editButton) - } +// allSelectedButton.snp.makeConstraints { make in +// make.left.equalToSuperview().offset(15) +// make.top.bottom.equalTo(editButton) +// } } } diff --git a/Thimra/Class/MyList/Controller/SPPlayHistoryViewController.swift b/Thimra/Class/MyList/Controller/SPPlayHistoryViewController.swift index 342675d..abe8d0e 100644 --- a/Thimra/Class/MyList/Controller/SPPlayHistoryViewController.swift +++ b/Thimra/Class/MyList/Controller/SPPlayHistoryViewController.swift @@ -16,14 +16,14 @@ class SPPlayHistoryViewController: SPMyListChildViewController { //MARK: UI属性 private lazy var collectionViewLayout: UICollectionViewFlowLayout = { - let itemWidth = floor((kSPScreenWidth - 30 - 9 * 2) / 3) - let itemHeight = 146 / 109 * itemWidth + 36 + let itemWidth = kSPScreenWidth - 32 + let itemHeight = 151.0 let layout = UICollectionViewFlowLayout() layout.itemSize = .init(width: itemWidth, height: itemHeight) - layout.minimumLineSpacing = 10 + layout.minimumLineSpacing = 18 layout.minimumInteritemSpacing = 9 - layout.sectionInset = .init(top: 0, left: 15, bottom: 0, right: 15) + layout.sectionInset = .init(top: 0, left: 16, bottom: 0, right: 16) return layout }() @@ -39,7 +39,7 @@ class SPPlayHistoryViewController: SPMyListChildViewController { collectionView.sp_addRefreshBackFooter { [weak self] in self?.handleFooterRefresh(nil) } - SPCollectListCell.registerCell(collectionView: collectionView) + SPPlayHistoryCell.registerCell(collectionView: collectionView) return collectionView }() @@ -130,8 +130,7 @@ extension SPPlayHistoryViewController { extension SPPlayHistoryViewController: UICollectionViewDelegate, UICollectionViewDataSource { func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { - let cell = SPCollectListCell.dequeueReusableCell(collectionView: collectionView, indexPath: indexPath) - cell.sp_isEditing = self.sp_isEditing + let cell = SPPlayHistoryCell.dequeueReusableCell(collectionView: collectionView, indexPath: indexPath) cell.model = dataArr[indexPath.row] return cell } diff --git a/Thimra/Class/MyList/View/SPCollectListCell.swift b/Thimra/Class/MyList/View/SPCollectListCell.swift index aebab6a..37130f1 100644 --- a/Thimra/Class/MyList/View/SPCollectListCell.swift +++ b/Thimra/Class/MyList/View/SPCollectListCell.swift @@ -9,45 +9,59 @@ import UIKit class SPCollectListCell: SPCollectionViewCell { + var clickDeleteButton: ((_ cell: SPCollectListCell) -> Void)? + var model: SPShortModel? { didSet { coverImageView.sp_setImage(url: model?.image_url) titleLabel.text = model?.name - selectedButton.isSelected = model?.sp_isSelected ?? false +// selectedButton.isSelected = model?.sp_isSelected ?? false } } var sp_isEditing: Bool = false { didSet { - selectedButton.isHidden = !sp_isEditing + deleteButton.isHidden = !sp_isEditing } } private lazy var coverImageView: SPImageView = { let imageView = SPImageView() - imageView.layer.cornerRadius = 7 + imageView.layer.cornerRadius = 6 imageView.layer.masksToBounds = true + imageView.layer.borderColor = UIColor.colorFFFFFF(alpha: 0.15).cgColor + imageView.layer.borderWidth = 1 + imageView.isUserInteractionEnabled = true return imageView }() private lazy var titleLabel: UILabel = { let label = UILabel() - label.font = .fontRegular(ofSize: 13) - label.textColor = .colorFFFFFF(alpha: 0.9) + label.font = .fontMedium(ofSize: 12) + label.textColor = .colorFFFFFF() label.numberOfLines = 2 return label }() - private lazy var selectedButton: UIButton = { + private lazy var deleteButton: UIButton = { let button = UIButton(type: .custom) - button.isHidden = true - button.isUserInteractionEnabled = false - button.setImage(UIImage(named: "check_icon_01"), for: .normal) - button.setImage(UIImage(named: "check_icon_01_selected"), for: .selected) +// button.isUserInteractionEnabled = false + button.setImage(UIImage(named: "delete_icon_04"), for: .normal) + button.backgroundColor = .color000000(alpha: 0.68) + button.addTarget(self, action: #selector(handleDeleteButton), for: .touchUpInside) return button }() +// private lazy var selectedButton: UIButton = { +// let button = UIButton(type: .custom) +// button.isHidden = true +// button.isUserInteractionEnabled = false +// button.setImage(UIImage(named: "check_icon_01"), for: .normal) +// button.setImage(UIImage(named: "check_icon_01_selected"), for: .selected) +// return button +// }() + override init(frame: CGRect) { super.init(frame: frame) @@ -59,6 +73,10 @@ class SPCollectListCell: SPCollectionViewCell { fatalError("init(coder:) has not been implemented") } + @objc private func handleDeleteButton() { + self.clickDeleteButton?(self) + } + } extension SPCollectListCell { @@ -66,7 +84,7 @@ extension SPCollectListCell { private func _setupUI() { contentView.addSubview(coverImageView) contentView.addSubview(titleLabel) - coverImageView.addSubview(selectedButton) + coverImageView.addSubview(deleteButton) coverImageView.snp.makeConstraints { make in make.left.right.top.equalToSuperview() @@ -75,13 +93,12 @@ extension SPCollectListCell { titleLabel.snp.makeConstraints { make in make.left.equalToSuperview() - make.top.equalTo(coverImageView.snp.bottom).offset(5) + make.top.equalTo(coverImageView.snp.bottom).offset(8) make.right.lessThanOrEqualToSuperview() } - selectedButton.snp.makeConstraints { make in - make.right.equalToSuperview().offset(-5) - make.top.equalToSuperview().offset(5) + deleteButton.snp.makeConstraints { make in + make.edges.equalToSuperview() } } diff --git a/Thimra/Class/MyList/View/SPPlayHistoryCell.swift b/Thimra/Class/MyList/View/SPPlayHistoryCell.swift new file mode 100644 index 0000000..7fb8da0 --- /dev/null +++ b/Thimra/Class/MyList/View/SPPlayHistoryCell.swift @@ -0,0 +1,127 @@ +// +// SPPlayHistoryCell.swift +// Thimra +// +// Created by Overseas on 2025/4/23. +// + +import UIKit + +class SPPlayHistoryCell: SPCollectionViewCell { + + var model: SPShortModel? { + didSet { + coverImageView.sp_setImage(url: model?.image_url) + titleLabel.text = model?.name + + let episode = String(format: "EP.%@".localized, model?.current_episode ?? "") + let totalEpisode = "/\(model?.episode_total ?? 0)" + let range = NSRange(location: episode.length(), length: totalEpisode.length()) + + let episodeString = NSMutableAttributedString(string: episode + totalEpisode) + episodeString.color = .colorEC3324() + episodeString.setColor(.color6D7A8F(), range: range) + + episodeLabel.attributedText = episodeString + + collectButton.isSelected = model?.is_collect ?? false + } + } + + private lazy var coverImageView: SPImageView = { + let imageView = SPImageView() + imageView.layer.cornerRadius = 6 + imageView.layer.masksToBounds = true + imageView.layer.borderColor = UIColor.colorFFFFFF(alpha: 0.15).cgColor + imageView.layer.borderWidth = 1 + imageView.isUserInteractionEnabled = true + return imageView + }() + + private lazy var titleLabel: UILabel = { + let label = UILabel() + label.font = .fontMedium(ofSize: 16) + label.textColor = .colorFFFFFF() + label.numberOfLines = 2 + return label + }() + + private lazy var episodeLabel: UILabel = { + let label = UILabel() + label.font = .fontMedium(ofSize: 12) + return label + }() + + private lazy var collectButton: UIButton = { + let button = UIButton(type: .custom) + button.setImage(UIImage(named: "collect_icon_02"), for: .normal) + button.setImage(UIImage(named: "collect_icon_02_selected"), for: .selected) + button.setImage(UIImage(named: "collect_icon_02_selected"), for: [.selected, .highlighted]) + button.addTarget(self, action: #selector(handleCollectButton), for: .touchUpInside) + return button + }() + + override init(frame: CGRect) { + super.init(frame: frame) + NotificationCenter.default.addObserver(self, selector: #selector(updateShortCollectStateNotification), name: SPVideoAPI.updateShortCollectStateNotification, object: nil) + + _setupUI() + } + + @MainActor required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + @objc private func handleCollectButton() { + let isCollect = !(self.model?.is_collect ?? false) + guard let shortPlayId = self.model?.short_play_id else { return } + + SPVideoAPI.requestCollectShort(isCollect: isCollect, shortPlayId: shortPlayId, videoId: nil) { + + } + } + + @objc private func updateShortCollectStateNotification(sender: Notification) { + guard let userInfo = sender.userInfo else { return } + guard let shortPlayId = userInfo["id"] as? String else { return } + guard let isCollect = userInfo["state"] as? Bool else { return } + guard shortPlayId == self.model?.short_play_id else { return } + + self.model?.is_collect = isCollect + collectButton.isSelected = isCollect + } + +} + +extension SPPlayHistoryCell { + + private func _setupUI() { + contentView.addSubview(coverImageView) + contentView.addSubview(titleLabel) + contentView.addSubview(episodeLabel) + contentView.addSubview(collectButton) + + coverImageView.snp.makeConstraints { make in + make.left.top.bottom.equalToSuperview() + make.width.equalTo(109) + } + + titleLabel.snp.makeConstraints { make in + make.left.equalTo(coverImageView.snp.right).offset(14) + make.top.equalToSuperview().offset(3) + make.right.lessThanOrEqualToSuperview().offset(-40) + } + + episodeLabel.snp.makeConstraints { make in + make.left.equalTo(titleLabel) + make.top.equalTo(titleLabel.snp.bottom).offset(12) + } + + collectButton.snp.makeConstraints { make in + make.right.equalToSuperview() + make.top.equalToSuperview().offset(3) + } + } + + +} diff --git a/Thimra/Source/Assets.xcassets/icon/check_icon_01.imageset/Contents.json b/Thimra/Source/Assets.xcassets/icon/cancel_icon_01.imageset/Contents.json similarity index 75% rename from Thimra/Source/Assets.xcassets/icon/check_icon_01.imageset/Contents.json rename to Thimra/Source/Assets.xcassets/icon/cancel_icon_01.imageset/Contents.json index 328d961..5c4d3b1 100644 --- a/Thimra/Source/Assets.xcassets/icon/check_icon_01.imageset/Contents.json +++ b/Thimra/Source/Assets.xcassets/icon/cancel_icon_01.imageset/Contents.json @@ -5,12 +5,12 @@ "scale" : "1x" }, { - "filename" : "组件 67 – 2@2x.png", + "filename" : "Frame@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "组件 67 – 2@3x.png", + "filename" : "Frame@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/Thimra/Source/Assets.xcassets/icon/cancel_icon_01.imageset/Frame@2x.png b/Thimra/Source/Assets.xcassets/icon/cancel_icon_01.imageset/Frame@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..5a034760aa2f259bdb814dc61009f4302bbd3c60 GIT binary patch literal 295 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbBI14-?iy0WiR6&^0Gf3qFP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{vJ;k$B+ufx6?0jwipPwOke%LYXgh-E}?bG z-aB3&5Yjm)q?35Z;fMm8>9M=>D-Aeiolw5HM#G6i(TpL(#MwuCp36)@?f*}2diQV| zRlPLzEvgpcFAHNUJbf>TH&r89Pna!h->m*SOHQ47@j!3p9Z$up+dS3(nCb7-X`N-d zcyiR)5Uo~qt{ov<{_~ct4%%RGD}8Cg&Gfz{4=#Qw3i|NofTZS*6LY2%{Wg2+`SV1| olB)2TE?Od6-p4a3K4CMKJatQP-?C?Kf&O6dboFyt=akR{0CKKwmH+?% literal 0 HcmV?d00001 diff --git a/Thimra/Source/Assets.xcassets/icon/cancel_icon_01.imageset/Frame@3x.png b/Thimra/Source/Assets.xcassets/icon/cancel_icon_01.imageset/Frame@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..e5993d0bc6f9e1026205f4da9f896085e1da57ee GIT binary patch literal 377 zcmeAS@N?(olHy`uVBq!ia0vp^W+2SL1|)l2v+e>Z&H|6fVg?393lL^>oo1K-6l5$8 za(7}_cTVOdki(Mh=#c^S1m z-nMX!MeJ{{e!=ZkAsZ$hePkvqnv+p>=h>pBUf;gkIUySkUM!s5|LNF~gD#cMj~*=A z!&oR9Gv&H)yX4c}p5msIggL@4wuOEZ{&p09;-9tSSD23IM}8)tZx)@5+i&&8{Y`=5 RQ(#Cjc)I$ztaD0e0szq4ly(3B literal 0 HcmV?d00001 diff --git a/Thimra/Source/Assets.xcassets/icon/check_icon_01.imageset/组件 67 – 2@2x.png b/Thimra/Source/Assets.xcassets/icon/check_icon_01.imageset/组件 67 – 2@2x.png deleted file mode 100644 index 669f9bb5bd83b7e8ea76fd784faeda7092fc4183..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 764 zcmVPx%wn;=mR9HvVm`#YyVHC!HPZUuKv0{U=H47riM;2n?BMVD4l13YV!>8EQll({s40q$`%LGK|J?by*S+0)o%*ld_dW0PKcCNeMGX=W(}C5% zT3{A17nqSMz5so|C*T3_P}0|G)vKC~5wRFJ04xJ0R&xgU1@r=EB|RVS%$PtTVm@#L zSeJ@^0?&XR;1%!z_?&AqfjPj!+`j~vlxyC9O48fW0F4SHB5eN4z*OK{>5^;yBz+(6 z@4Oxn(@H>h0J~C0KhPz~ZW|^e0*Q#-z`=AwcS-LtN%nos5)qE2m|MMo+1!i!r9R+sjHEe7y*ovz%kP!sdErWM7TcO%IsMAuYp-D z_zd7DY5h&EGXoZhh?~HQEI#L|Ranoyh}fS+^0B0CiU^nJ7r<{|QMGlV9uS2(^Aea) z3Wp8@*#cYy29VWzK`rMCp4ej`<-j>A=|(Mz>fIX=+kun7Z3A(TI#{<#a+7MB6q2OZ zK%QnhUs_5fxACS)M3_eS{yqb7N1P1IljQE&G>M2Qz-yr2K;C7$ZaI*)am}4lk1>ha zEXky&X;K-iZIixjQ_#vK-ek9<$tB*c#bmsreVSf2Add@oozKAXmeGI&(|Tf*Kw3c+ z*GTeg^p`3o7|$}cj00$AOUQG%idBpgrzKrzM1_lpy}+T=HTF1B0j9MBRsl?L1Xw^upr(CnUWe&CUPEvqUBOWc;i0 up=NeILlhrsoQfa)NCP~QRJPW*@%{(%k6f7c#dAvl0000 diff --git a/Thimra/Source/Assets.xcassets/icon/check_icon_01.imageset/组件 67 – 2@3x.png b/Thimra/Source/Assets.xcassets/icon/check_icon_01.imageset/组件 67 – 2@3x.png deleted file mode 100644 index a17639af37ab7ccd4d94c4b6783a4d226aaf888f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1415 zcmV;21$g?2P)Px)K}keGRA@upntjNfa~Q`zmq-bD`$I?y{|H;!yuY(34Jksc(TZ)%%Z9LN$w(eA zX>9X{mm!w@gGH9S&TGUTq=eEFlGucl$mRY%yMF8U-0tVN@8_Je^PF?lsdMi0yMOon z{ax=bMhD2yEHX10iQ+ydZ2V6WI*mTnoaww2Wz7fb+|SIGX{42Z1GoxmGrCOzp2 zxx4h|B;dvnK|M!+Rsk!=1Jnx4>=H-B<|XZz&Zfx2^ot`B^8{#_nXRtc>px&Z*^dJr z4UR|`UInggqTEeie7yBxB&3_CXMipR-Yy%3F<>&QwH(+lZho!s+*kDiNCFsuR%RUf zHuP$Yl`DghA9$eP#ED_Gq$BgUrD(O_kfMtfp+mBAZx+Vr%KVVaVC2ztL$X>6&Fqy< ziA=luxch10Op}$)L&Ax9)fMnR40@`g{*u zEWJ)(W);A0jqv?l;Bqrl1Uo6o-IXsr1RMh>+FojAPgr>R+lxT)g2E}vs}Ds8KH*ra z+b0mQoKg_!kD>+X`eK2R;>)8R8X>$yOiprAle?c9qNWt$GhnvB92tS560C24nZ0z7 zbx$xHsr34Q5Vi9JMv2y<*kp~FrSEn3?b$kaS6ZUzS~MgucZfxCVX>J#*0Z;3_+WRx zq_AkxchPErc?38kF3d5rmm2Qbv*qr7Ch%~)zxa(p34Gfr0rh3(^|HuO(FIW2GS|%1 zZr@6E`ZHRrQ&17TaXY)+I4^*x^E@N=QU~q-`!gjjRdvo(@K9TOn~=M!JuinovCdg$ z-4q!NMo%*gf&f)@o1a!wsvCYNs{CqMT-32{b4ldHX34F(1WC{2SXFcD_8fq!{LY&5Ky`zYI7zfLo+X2^ITODhV;V~0*pW%Ve*ps( VUCOkV*}wn*002ovPDHLkV1kY$ubcn? diff --git a/Thimra/Source/Assets.xcassets/icon/check_icon_01_selected.imageset/组件 67 – 9@2x.png b/Thimra/Source/Assets.xcassets/icon/check_icon_01_selected.imageset/组件 67 – 9@2x.png deleted file mode 100644 index 76bcc226b494cc25edb1e9663af68baad5ade33c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1093 zcmV-L1iJf)P)Px&|4BqaR9Hv7muqMoRTRhn=gw?4yR%KHCbYgjsNe&&ZjIn4h591hO=|nW;xnz8 zbrD1jf}ki!K`MR_tRQIJO&U=|Dx`F?(}cFRe(`}wMbKiA`Y2YEE+pyBCfS{tBQxoS zq&vGaJJWicP8-pJ{ny7TmZ6x463w$Git_I;6$AWPhz-a7if;x4p0pksTHiO^` zx*;KhLD(#k+!(GsTyQX;7oj2}DQF zHl-2>ofjKKx??S(PbXphqhtQfuNQ$DM`cEsJv6IoTO`8xrGnr&1EfSS|JFCKPEEU} zF&SG)AJRU6K=xvS)GJ{_ASS~&_9tqeHND;K)bEq7YEvLQ=n5hT(dT+0u3UwM50At8 z)qO?FwE-Xi=1Hn#iYFL!lk5GzPC;zv-QY?MkOdZYf7cQw5QLqW@iUcGZH5S4&HkE> zXEs2(tp})@EnxyfI3PUj2?9ar$R=CDgo1E5FiYi(_6q?wwA`#MV5Hu)h-Q*#V`Da? zV&J4*kuQmGkLRgzfiVvKhRCMtLqVLs-j9)<(Z&D_dV<&i%V8`Ab;^qn5#i^EHc!E{ zm(HmZj|dW<`T|)7BloVecf0f1tR4Q{>z-(7Z?W|#l^)l+Vln*7K(rm0=9OR=X2(aw3gcywdN*OWbde>a2n)#2-^wgKQ>06hTmxse$rz=znxD~Y}7AH1sO3#4u` zn=N#UniwDn{QzAD#^oUHcIKJRf=~kZ6q}f^B37Ym&%jwPfcpG@vLvmqDi78l00000 LNkvXXu0mjfk5T}8 diff --git a/Thimra/Source/Assets.xcassets/icon/check_icon_01_selected.imageset/组件 67 – 9@3x.png b/Thimra/Source/Assets.xcassets/icon/check_icon_01_selected.imageset/组件 67 – 9@3x.png deleted file mode 100644 index 35b6827b77de0b880e232f64289cda411f28c95f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1961 zcmV;a2UhrrP)Px+V@X6oRA@uhT5WJ#RT+Msb9XnpH=CqigrV4J7_796Ql>~t7!e(!v`MQYW224~ z+GHCm)0QvC!Ok#~KTerZ1X>JIngF(dQ^fIu-Lxq3QH9!y(3w_|f>Vk!rs+o}$?n}` zyZ5|$?~*i|X0vzmv5DvB-uImMdCvQs_q^wvB_^QBrdUb*oKX=-pPOydSS*4oAi9cR zl>k*B=Ro8%f#U)>4#9C6>Ys+#hf_ZPnXupP=JwkD@j~Hv2IyNK{gf^028diu;wk|? z4R9tP9>%2r(j|f;Bn|^SY*6nHK2i7HSTT8Udg0LBjeBSLn7#{8w-cBnV8|PRTreqw zBn3DP=%-EbJ83k!AT)t-=dZLk?O{urKr@C=)q zwU@r0$Vl@mzTOjwTBX!I1a1JJybL~08(V-^DR{)37iwqo7t{I1^F*e%AzH5#wgIYg zd~(VMXZUw#UFlA(vAL|RZco16qmt=Zv#+!)sBeep?Es4rjU0GIgR;pC&w7#%U7yUk z@^XEUrr(*CZG4Z!_XQ};H!DT>9tW`1RQAK%vC10BU(U!_k=Qo`*a;w91fX7B#0An6 z-dXpYCo%$IGSa?GfR_Q7UcD60PAqCw6KY$2fN<8-`F25MQcZi8q-?#5#FfPZSg0o+ z^^2?twAQ|zlg!zsJrzM6ZV}*{MM}SgvKX+}0{kMS;&;s2QQtlAV^(D14KLPE@waey z^l9HLCHzXLb%nDW+%`x?R__T}72($aTs!S)oCo-4vwOyu_%LcT1($|W|Tfa;ax*zSL_HmL;`EC zg7KM)T-Op$p>OM(kkdJHPs^!@kNyTK|#|ry8D;#&7_E`h_r-%?0{x zh&cJwht%#PNWcD3UQ7b+FZHRfGrm50H8fu%QJ%NgBpA36sb2)++Dm|xhS=IAqE9E0 z`srKH9f`bNMbJaw3rs{_Yy#Bdd3#KPL6)@oY)D#zrGDsB7E(J8Lw`89ALjKglyyu* zVm}11C9k!c`v~9XE``7LlhBi^l>5D(gRgF7^9jZ<1fF^kCS4w(}m=6NCG*p%F}6vl#? zkbWD`l95JN5`B;SHLv6*Tv|gw6ZnAfNX*FuWnRg!q6GeLT?yafN=WKsLZM8AMw8rR zNGmHcKySg3aivmGf1JXSJpzmX&t4rESCDcj9_!j~v)rQDS##+Wi-p!&9)dB{ zhMZI#JiKoE?I%`qE7O_U~TUf9vp!tWZM&39V&gxUKFfm&~Nx0XQRjIl~u!&uap5<8QfX-`+@#h*Rz?2S7`%e)pWmW2Kei9emgSb zv6WpTl5u{t)*8HEJ4fGf9UA@%h3bJtz{VPK00000NkvXXu0mjf{AQ|- diff --git a/Thimra/Source/Assets.xcassets/icon/check_icon_01_selected.imageset/Contents.json b/Thimra/Source/Assets.xcassets/icon/collect_icon_02.imageset/Contents.json similarity index 75% rename from Thimra/Source/Assets.xcassets/icon/check_icon_01_selected.imageset/Contents.json rename to Thimra/Source/Assets.xcassets/icon/collect_icon_02.imageset/Contents.json index 813db8e..5c4d3b1 100644 --- a/Thimra/Source/Assets.xcassets/icon/check_icon_01_selected.imageset/Contents.json +++ b/Thimra/Source/Assets.xcassets/icon/collect_icon_02.imageset/Contents.json @@ -5,12 +5,12 @@ "scale" : "1x" }, { - "filename" : "组件 67 – 9@2x.png", + "filename" : "Frame@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "组件 67 – 9@3x.png", + "filename" : "Frame@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/Thimra/Source/Assets.xcassets/icon/collect_icon_02.imageset/Frame@2x.png b/Thimra/Source/Assets.xcassets/icon/collect_icon_02.imageset/Frame@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..3f0a054726deaaf73df80daff4d04105525cca58 GIT binary patch literal 685 zcmV;e0#f~nP)fN*(vypUgj zl_P?MfQTD?N%-*^MNtK7ffkqIf26PmXd#IZb=RpB&wB_BEh1+z7e`(WAwdqg-0I5@ zA+Xn};4Y526x>B!>6t6P4a9_TQCFyhJIO#?7#D?mrAO>*Tx8c`oenb9dk72^ zLzB!j|K1q_ga1`TIfP+%=m;hf+wql<*e|n?A}w)QUr-Q{UgAXXOGQo+Cknkp zNNj-1IZ5q#$%ickk!fISac`~N+d#-->&ktb8Or2~v9e+BCWbP}BCO2TEd)s3Q8o|W z%4*PQpLIpq@U1-5x}tm@td$McO$XEo*UFl83yXSra8`D)uBfY9`TC!}T&?S?{;V2f zU7u}q$@zH5`-{>_r5LIs-N9`V z*IoLq2DSwU@!tK}Q;eVw{P|vATTcc%j*RzG+xfLmqxK%H9z5U6wt8iTL~lFNI--aB z6zoMaT|za>wDd+tF?eOAaEgws;Iv(A^rXh}qrQkl2egE`eg+QETtbv+PaR+eVdXb! zaQdXlh&kV-BXqb>Fna!Kr#5JhAL>9J|~AAw78V}%QdEr}&w>s{VV3~oJGX#QDy)tC~!P`(7{7TDZW zP!Guj2i*c&v^wFCp{-#>#o(ZwVMPPMK#ztM4P8C7H(1f&)k1rR6%Ah<^klH2gR6m_ z99DE>g6<8l`_?S5qB9e83^NIvC!pzIMW<&+Ntjt0uyx$}2J97!ymRz$gi4W*!BQ^3 zcOw4|^Xo?%wqSOv^98Y(VqTHoq%tl!!tBi?@|^xT*Xju zt)BHW^^gvpLq<$Hz863!PB_0000>*THoVt^_IwS3%Oj(ZO*Q95V^zl@8A7z|R3o+0~fDAy^WY z75vY@*p|He&5l>Q58sstO4q#GU9#0Gg$C3JpdO8G6=U=AGp_ZVZ8pCk zP{Dxv(P+vT`+aH*p}%(@A6F0{4uRr~-BgVUt#2XJJ_JZlCW!_}D#vkbhjSo6VSpYH z3XNiIKv(qM<^@KvHlWh_#&>Q=6l-O%zP^@9i2vujQ#Ye)MG)c6j!4}odPfi|g@imG zDy1ae-a$Rha9P@dQW-AdTb~!$5kwzeUStk1WI|lAJeQiWAr481AauUPr6AQpqzL_N z;5(fymdUI%r+^!e?-alkFZ*y|mCK|7JXK3CE~RGT>FM4i3BpaGZQ|S{)gg-|v`^+! zI{;?TKBe?$05NNW`?jWqb>1);z}|X&kKbWyAc>{3*(~V#!#apXea;)`;X*`kSQ6)l z`%jhRl90!6q?4uY5|F3hNR_qtD#F^oMcVuYTd9QuYY$_tB#F?!xZF3Wz(m=z!ee z!yZA#B*d1(hZPW)mn(=Ymk)cAM9g4cAC-XTW-uPXt!Q&jKPZ|_Pgyg$1K~yw}l(i2~;mt9yn97v-J*Iif?Sob!ZiX{A!p>n-crYK>k2 XXfy|!exVFx00000NkvXXu0mjfTToDu literal 0 HcmV?d00001 diff --git a/Thimra/Source/Assets.xcassets/icon/collect_icon_02_selected.imageset/Frame@3x.png b/Thimra/Source/Assets.xcassets/icon/collect_icon_02_selected.imageset/Frame@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..96d9bd66898d4e889e36e7aa9a05a46f10cba901 GIT binary patch literal 1038 zcmV+p1o8WcP)CZQY3RIE6K_Ho)2he>m(bjIEkKVDIaj9RlE$PW_2%PNwDtsW2H4s z31cYSaxxyegkFZm3tz&um`uj6zI!6?^?u@Q04)N8)JP=B*|X0Dy4U*wEfY&9fYVaj zoVmk{Mf%2qX{7Jezvm94*h6SJm|}|QJ{OD~d>7ge4V#5voE@dmc5oc0ThXLxU~f5< z#>KFtdc9j+jJ>S`Tku#;CI|Gq7?yAbbqvKcu5F|u2#%`{FD4!z$V2%`iutjF=UX|; zQ_J>B#2be_iqI9@I`M** zhv{5yos0#07@;dzk=op04=_Ax?Na3Zz2!z6HKR9^c}v? z<{JU!zL5#$eHh>dc+Akz3pyzJB}r;ex>v&K-vCp%41z1uvaDA6*zb=pK-8U`BB7T- z5R96hh^5R*-sudnaz}M#>9?@u7#~w)cgq^lSLo=4t-n&K6ONOP>mW%6z@SkaLeVi! z=>}4WZ}b`a=pVe@tm>mSAmLdMoOa4hZS3z90IyyB-Y1*Pe{I2mJ62Wj+W-In07*qo IM6N<$f;y$#82|tP literal 0 HcmV?d00001 diff --git a/Thimra/Source/Assets.xcassets/icon/delete_icon_01.imageset/Contents.json b/Thimra/Source/Assets.xcassets/icon/delete_icon_01.imageset/Contents.json index 42b0bd4..5c4d3b1 100644 --- a/Thimra/Source/Assets.xcassets/icon/delete_icon_01.imageset/Contents.json +++ b/Thimra/Source/Assets.xcassets/icon/delete_icon_01.imageset/Contents.json @@ -5,12 +5,12 @@ "scale" : "1x" }, { - "filename" : "delet-选中@2x.png", + "filename" : "Frame@2x.png", "idiom" : "universal", "scale" : "2x" }, { - "filename" : "delet-选中@3x.png", + "filename" : "Frame@3x.png", "idiom" : "universal", "scale" : "3x" } diff --git a/Thimra/Source/Assets.xcassets/icon/delete_icon_01.imageset/Frame@2x.png b/Thimra/Source/Assets.xcassets/icon/delete_icon_01.imageset/Frame@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..8a6a2706831a18ee2e31be3210f9c32476cb2da3 GIT binary patch literal 371 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 diff --git a/Thimra/Source/Assets.xcassets/icon/delete_icon_04.imageset/Contents.json b/Thimra/Source/Assets.xcassets/icon/delete_icon_04.imageset/Contents.json new file mode 100644 index 0000000..5c4d3b1 --- /dev/null +++ b/Thimra/Source/Assets.xcassets/icon/delete_icon_04.imageset/Contents.json @@ -0,0 +1,22 @@ +{ + "images" : [ + { + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Frame@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Frame@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Thimra/Source/Assets.xcassets/icon/delete_icon_04.imageset/Frame@2x.png b/Thimra/Source/Assets.xcassets/icon/delete_icon_04.imageset/Frame@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..c42bd69b8fe7c70854efc17cb877fa0e9d63fe2f GIT binary patch literal 658 zcmV;D0&V??P)Fu0`>%x1G# zdS+q4%1h#}vGAH7@R}c~8hAF=(;ZcZzP;b?S5y(O5>`hqF`Z5wxwFw|xbOmfuCveF zZnyWOk!G{WzP-(Ll+U}}ZXw?@nM}g^sUmk`Cr9$lq>=f2ex45oiqht*oR=_ybyGRP zs(;N#@Mq)0#ki<0hQpyJ^*QKUqZ+|w_QvD!rs&urC|fxB0CJP2%L2uIxFqi5?*pe+ ztMygJY7tD*2asZa-q>8srqhiPtQ#X(H%72-j9}du!MZVmbz=nUMp-aIqaor3A=kO& zw%CsoM<6smRK^yel!Y-_7s7fde}r3cPFvy_)a8roDr1XK>JXY(CQR!ejYdJ)v3dNf zHGGbBoq}{a5z`2i5s^<7jNHSU&}<<%_(B@sqd&(gNJybcbAKZ7r z1kdNAzj*v#VzZ`(b~85}=h0BCh1bAfbm9_EEt6CVwh!D~WistIR0OU0IbW^6B*#H0l07*qoM6N<$g3}Ew6#xJL literal 0 HcmV?d00001 diff --git a/Thimra/Source/Assets.xcassets/icon/delete_icon_04.imageset/Frame@3x.png b/Thimra/Source/Assets.xcassets/icon/delete_icon_04.imageset/Frame@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..ccb96c284d55224eafcf51520a702450288288f8 GIT binary patch literal 954 zcmeAS@N?(olHy`uVBq!ia0vp^P9V&|1|%PcFuVX#oCO|{#S9FJ79h;%I?XTvD9BhG zDkH1% zQbATFq`=?+e_djo;o<4Uq70%fs}&YD?Oy%hj-y6H|DMx2l6K8L*Z5|>F+O}FP{p+_ z(lgsrx?f0z=dg@skk(WsFOL2x2M@>VigjDrg->Ca_uO{jyTqL_aubwRIXSfasr79e1 z5mNG0v=f!Hwhh=d|H_{KoE-+|Vt&WRu%u;j+%YXmNx7-i_T}ioEB0}}1mBif?*M`t z<@~T`AHpA~yDTxt)jXUwFWTS1`sVbT*0(?Cun7JOU48Yy$%T)^HAO1!c;y}N=XlZ6 zFkAk@wC$Z`@sAzn_f6gUGT1h&6>~ehC#T3WqeeXX$GPc@w zfXRNL#~Z%i{~W4aqpvFc@C}pEFU$HB;ZbQb={x`ZPwl5S8stCWSJl@S_@BQusxrtW zlw-%5)A>1XpRabVmfn1`M?U3mx#h+svPX)#UT0RQ2E-~~l~dldPVyt)gE{7YdzU9Q zFHLabP-`KRSg`l0_}c$x)Zg>vUQ6QEFY**t+fr?m=hL-<>)`S?3di*KJvU%|lP|{i z^y%chiVtkhAM?NSZui^oc!u+p?um(RUP@Cu|3)}04SIO?)*|mXyZas94- z8SHVamfJQ-eMaoQom0x+Ng3?EZ{1q^-|>;H{S?3Dhn3!RTb9mCowMBk2Me>!kGEk) z(H`HZoT1djA{I4<<51y>-Uo#d?D+^N@l6NS<^ZHk;@x~h#3zV?*G%BYxt(} z5aaIdV6|^wPS!VEU1pr}bk%Xu#K>uWE$97{?r1Dp9h28?xs