Skip to content

Commit 47175af

Browse files
Merge pull request #129 from Adamant-im/develop
Develop to master. Version 2.8.0 Fix bugs
2 parents a44d7a8 + e146c4d commit 47175af

29 files changed

+221
-76
lines changed

Adamant.xcodeproj/project.pbxproj

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@
1515
3AE89DDB2837F5D30051D3A9 /* ChatRoomsChats.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AE89DDA2837F5D30051D3A9 /* ChatRoomsChats.swift */; };
1616
3C06931576393125C61FB8F6 /* Pods_Adamant.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33975C0D891698AA7E74EBCC /* Pods_Adamant.framework */; };
1717
412C0ED929124A3400DE2C5E /* dash_notificationContent.png in Resources */ = {isa = PBXBuildFile; fileRef = 412C0ED829124A3400DE2C5E /* dash_notificationContent.png */; };
18+
415441372923AB3700824478 /* BtcProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 415441362923AB3700824478 /* BtcProvider.swift */; };
19+
415441382923AB3700824478 /* BtcProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 415441362923AB3700824478 /* BtcProvider.swift */; };
20+
415441392923AB3700824478 /* BtcProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 415441362923AB3700824478 /* BtcProvider.swift */; };
21+
4154413B2923AED000824478 /* btc_notificationContent.png in Resources */ = {isa = PBXBuildFile; fileRef = 4154413A2923AED000824478 /* btc_notificationContent.png */; };
22+
4154413C2923AED000824478 /* btc_notificationContent.png in Resources */ = {isa = PBXBuildFile; fileRef = 4154413A2923AED000824478 /* btc_notificationContent.png */; };
1823
4164A9D728F17D4000EEF16D /* ChatTransactionService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4164A9D628F17D4000EEF16D /* ChatTransactionService.swift */; };
1924
4164A9D928F17DA700EEF16D /* AdamantChatTransactionService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4164A9D828F17DA700EEF16D /* AdamantChatTransactionService.swift */; };
2025
416F5EA4290162EB00EF0400 /* SocketIO in Frameworks */ = {isa = PBXBuildFile; productRef = 416F5EA3290162EB00EF0400 /* SocketIO */; };
@@ -659,6 +664,8 @@
659664
3AE89DD82837F5BF0051D3A9 /* ChatRooms.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatRooms.swift; sourceTree = "<group>"; };
660665
3AE89DDA2837F5D30051D3A9 /* ChatRoomsChats.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatRoomsChats.swift; sourceTree = "<group>"; };
661666
412C0ED829124A3400DE2C5E /* dash_notificationContent.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = dash_notificationContent.png; sourceTree = "<group>"; };
667+
415441362923AB3700824478 /* BtcProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BtcProvider.swift; sourceTree = "<group>"; };
668+
4154413A2923AED000824478 /* btc_notificationContent.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = btc_notificationContent.png; sourceTree = "<group>"; };
662669
4164A9D628F17D4000EEF16D /* ChatTransactionService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatTransactionService.swift; sourceTree = "<group>"; };
663670
4164A9D828F17DA700EEF16D /* AdamantChatTransactionService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AdamantChatTransactionService.swift; sourceTree = "<group>"; };
664671
417BA7F328BF894F00DF94C5 /* NotificationSoundsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationSoundsViewController.swift; sourceTree = "<group>"; };
@@ -1686,6 +1693,7 @@
16861693
E957E106229AF7CB0019732A /* eth_notificationContent.png */,
16871694
E957E105229AF7CA0019732A /* lsk_notificationContent.png */,
16881695
412C0ED829124A3400DE2C5E /* dash_notificationContent.png */,
1696+
4154413A2923AED000824478 /* btc_notificationContent.png */,
16891697
);
16901698
path = WalletImages;
16911699
sourceTree = "<group>";
@@ -1719,6 +1727,7 @@
17191727
E957E100229AC2050019732A /* EthProvider.swift */,
17201728
64E3D52424B258F800660641 /* ERC20Provider.swift */,
17211729
E957E0FE229AC1C80019732A /* LskProvider.swift */,
1730+
415441362923AB3700824478 /* BtcProvider.swift */,
17221731
E957E0F622999BD50019732A /* TransferBaseProvider.swift */,
17231732
);
17241733
path = RichMessageProviders;
@@ -2417,6 +2426,7 @@
24172426
files = (
24182427
E957E135229B10F80019732A /* MainInterface.storyboard in Resources */,
24192428
E9D664D722A00E2800733F8A /* notificationContent.strings in Resources */,
2429+
4154413C2923AED000824478 /* btc_notificationContent.png in Resources */,
24202430
E957E172229C56EE0019732A /* Shared.xcassets in Resources */,
24212431
E9D664CA22A003D900733F8A /* Warning.xib in Resources */,
24222432
);
@@ -2426,6 +2436,7 @@
24262436
isa = PBXResourcesBuildPhase;
24272437
buildActionMask = 2147483647;
24282438
files = (
2439+
4154413B2923AED000824478 /* btc_notificationContent.png in Resources */,
24292440
E957E107229AF7CB0019732A /* adm_notificationContent.png in Resources */,
24302441
E957E108229AF7CB0019732A /* doge_notificationContent.png in Resources */,
24312442
E957E10A229AF7CB0019732A /* eth_notificationContent.png in Resources */,
@@ -2644,6 +2655,7 @@
26442655
E9B3D39A201F90570019EB36 /* AccountsProvider.swift in Sources */,
26452656
417BA7F428BF894F00DF94C5 /* NotificationSoundsViewController.swift in Sources */,
26462657
E950652320404C84008352E5 /* AdamantUriTools.swift in Sources */,
2658+
415441372923AB3700824478 /* BtcProvider.swift in Sources */,
26472659
E95F85C7200A9B070070534A /* ChatTableViewCell.swift in Sources */,
26482660
A50A41082822F8CE006BDFE1 /* BtcWalletService.swift in Sources */,
26492661
6455E9F121075D3600B2E94C /* AddressBookService.swift in Sources */,
@@ -2903,6 +2915,7 @@
29032915
E957E14E229C3E530019732A /* StateAsset.swift in Sources */,
29042916
E957E145229C040E0019732A /* AdamantAvatarService.swift in Sources */,
29052917
E957E149229C3E530019732A /* Keypair.swift in Sources */,
2918+
415441392923AB3700824478 /* BtcProvider.swift in Sources */,
29062919
E957E150229C3E530019732A /* Transaction.swift in Sources */,
29072920
E951467022A697F7007564D7 /* ContactDescription.swift in Sources */,
29082921
E957E151229C3E530019732A /* TransactionAsset.swift in Sources */,
@@ -2978,6 +2991,7 @@
29782991
E9EF7A8022A02DBC00F2E1C2 /* AdamantLocalized.swift in Sources */,
29792992
E9771D9722996FEB0099AAC7 /* TransactionType.swift in Sources */,
29802993
E957E128229B0CF10019732A /* NotificationContent.swift in Sources */,
2994+
415441382923AB3700824478 /* BtcProvider.swift in Sources */,
29812995
E935C84E22AC079D00A8CA2F /* RichMessageTools.swift in Sources */,
29822996
E957E124229B0C330019732A /* AdamantNotificationKeys.swift in Sources */,
29832997
64E3D52524B258F800660641 /* ERC20Provider.swift in Sources */,
@@ -3113,7 +3127,7 @@
31133127
CODE_SIGN_IDENTITY = "Apple Development";
31143128
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
31153129
CODE_SIGN_STYLE = Automatic;
3116-
CURRENT_PROJECT_VERSION = 228;
3130+
CURRENT_PROJECT_VERSION = 231;
31173131
DEVELOPMENT_TEAM = J2L77FMN46;
31183132
INFOPLIST_FILE = MessageNotificationContentExtension/Info.plist;
31193133
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
@@ -3145,7 +3159,7 @@
31453159
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
31463160
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
31473161
CODE_SIGN_STYLE = Manual;
3148-
CURRENT_PROJECT_VERSION = 228;
3162+
CURRENT_PROJECT_VERSION = 231;
31493163
DEVELOPMENT_TEAM = J2L77FMN46;
31503164
INFOPLIST_FILE = MessageNotificationContentExtension/Info.plist;
31513165
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
@@ -3296,7 +3310,7 @@
32963310
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
32973311
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
32983312
CODE_SIGN_STYLE = Manual;
3299-
CURRENT_PROJECT_VERSION = 228;
3313+
CURRENT_PROJECT_VERSION = 231;
33003314
DEVELOPMENT_TEAM = "";
33013315
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = J2L77FMN46;
33023316
DISPLAY_NAME = ADM.Dev;
@@ -3329,7 +3343,7 @@
33293343
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
33303344
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
33313345
CODE_SIGN_STYLE = Manual;
3332-
CURRENT_PROJECT_VERSION = 228;
3346+
CURRENT_PROJECT_VERSION = 231;
33333347
DEVELOPMENT_TEAM = J2L77FMN46;
33343348
DISPLAY_NAME = Adamant;
33353349
EXCLUDED_SOURCE_FILE_NAMES = Debug.xcassets;
@@ -3360,7 +3374,7 @@
33603374
CODE_SIGN_IDENTITY = "Apple Development";
33613375
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
33623376
CODE_SIGN_STYLE = Automatic;
3363-
CURRENT_PROJECT_VERSION = 228;
3377+
CURRENT_PROJECT_VERSION = 231;
33643378
DEVELOPMENT_TEAM = J2L77FMN46;
33653379
INFOPLIST_FILE = TransferNotificationContentExtension/Info.plist;
33663380
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
@@ -3392,7 +3406,7 @@
33923406
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
33933407
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
33943408
CODE_SIGN_STYLE = Manual;
3395-
CURRENT_PROJECT_VERSION = 228;
3409+
CURRENT_PROJECT_VERSION = 231;
33963410
DEVELOPMENT_TEAM = J2L77FMN46;
33973411
INFOPLIST_FILE = TransferNotificationContentExtension/Info.plist;
33983412
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
@@ -3424,7 +3438,7 @@
34243438
CODE_SIGN_IDENTITY = "Apple Development";
34253439
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
34263440
CODE_SIGN_STYLE = Automatic;
3427-
CURRENT_PROJECT_VERSION = 228;
3441+
CURRENT_PROJECT_VERSION = 231;
34283442
DEVELOPMENT_TEAM = J2L77FMN46;
34293443
INFOPLIST_FILE = NotificationServiceExtension/Info.plist;
34303444
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
@@ -3456,7 +3470,7 @@
34563470
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
34573471
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
34583472
CODE_SIGN_STYLE = Manual;
3459-
CURRENT_PROJECT_VERSION = 228;
3473+
CURRENT_PROJECT_VERSION = 231;
34603474
DEVELOPMENT_TEAM = J2L77FMN46;
34613475
INFOPLIST_FILE = NotificationServiceExtension/Info.plist;
34623476
IPHONEOS_DEPLOYMENT_TARGET = 12.0;

Adamant/Assets/l18n/de.lproj/Localizable.strings

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -925,6 +925,9 @@
925925
/* Transfer: Amount is zero, or even negative notification */
926926
"TransferScene.Error.TooLittleMoney" = "Sie müssen mehr Tokens senden";
927927

928+
/* Transfer: Not enough fee for send a transaction */
929+
"TransferScene.Error.TooLittleFee" = "Nicht genug Gebühr";
930+
928931
/* Transfer: Minimal transaction amount is 0.00001 */
929932
"TransferScene.Error.MinAmount" = "Der Mindesttransaktionsbetrag beträgt 0,00001";
930933

Adamant/Assets/l18n/en.lproj/Localizable.strings

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -904,6 +904,9 @@
904904
/* Transfer: Amount is zero, or even negative notification */
905905
"TransferScene.Error.TooLittleMoney" = "You should send more tokens";
906906

907+
/* Transfer: Not enough fee for send a transaction */
908+
"TransferScene.Error.TooLittleFee" = "Not enough fee";
909+
907910
/* Transfer: Alert title: Account not found or not initiated. Alert user that he still can send money, but need to double ckeck address */
908911
"TransferScene.unsafeTransferAlert.title" = "Can't verify %@";
909912

Adamant/Assets/l18n/ru.lproj/Localizable.strings

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -898,6 +898,9 @@
898898
/* Transfer: Amount is zero, or even negative notification */
899899
"TransferScene.Error.TooLittleMoney" = "Вам следует отправить больше токенов";
900900

901+
/* Transfer: Not enough fee for send a transaction */
902+
"TransferScene.Error.TooLittleFee" = "Недостаточно средств для комиссии";
903+
901904
/* Transfer: Minimal transaction amount is 0.00001 */
902905
"TransferScene.Error.MinAmount" = "Минимальная сумма перевода 0.00001";
903906

Adamant/SharedViews/CheckmarkView.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ final class CheckmarkView: UIView {
3232
private lazy var spinner: UIActivityIndicatorView = {
3333
let view = UIActivityIndicatorView(style: .gray)
3434
view.isHidden = true
35+
view.color = .adamant.textColor
3536
return view
3637
}()
3738

Adamant/Stories/Chats/ChatViewController.swift

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -923,19 +923,19 @@ extension ChatViewController: TransferViewControllerDelegate, ComplexTransferVie
923923
// MARK: - RichTransfers status update
924924
extension ChatViewController {
925925
func updateStatus(for transaction: RichMessageTransaction, provider: RichMessageProviderWithStatusCheck, delay: TimeInterval? = nil) {
926-
guard transaction.transactionStatus != .updating else {
926+
927+
let objectID = transaction.objectID
928+
guard !isUpdatingRichMessageStatus(id: objectID) else {
927929
return
928930
}
929-
931+
richMessageStatusUpdating.append(objectID)
930932
if transaction.transactionStatus == nil || transaction.transactionStatus == .notInitiated {
931933
skipRichInitialUpdate.append(transaction.messageId)
934+
transaction.transactionStatus = .notInitiated
935+
} else {
936+
transaction.transactionStatus = .updating
932937
}
933938

934-
transaction.transactionStatus = .updating
935-
let objectID = transaction.objectID
936-
937-
richMessageStatusUpdating.append(objectID)
938-
939939
let operation = StatusUpdateProcedure(parentContext: stack.container.viewContext,
940940
objectId: objectID,
941941
provider: provider,
@@ -1016,6 +1016,7 @@ private class StatusUpdateProcedure: Procedure {
10161016
return
10171017
}
10181018

1019+
controller.removeRichMessageStatusUpdating(id: transaction.objectID)
10191020
controller.updateStatus(for: trs, provider: provider, delay: 2.0)
10201021
}
10211022
} else {

Adamant/Stories/Chats/ComplexTransferViewController.swift

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -120,11 +120,19 @@ extension ComplexTransferViewController: PagingViewControllerDataSource {
120120
DispatchQueue.main.async {
121121
v.recipientAddress = walletAddress
122122
v.recipientName = name
123-
v.hideProgress(animated: true)
124-
}
125-
case .failure(let error):
126-
v.showAlertView(title: nil, message: error.message, animated: true)
127-
}
123+
v.hideProgress(animated: true)
124+
if ERC20Token.supportedTokens.contains(where: { token in
125+
return token.symbol == self.services[index].tokenSymbol
126+
}) {
127+
let ethWallet = self.accountService.wallets.first { wallet in
128+
return wallet.tokenSymbol == "ETH"
129+
}
130+
v.rootCoinBalance = ethWallet?.wallet?.balance
131+
}
132+
}
133+
case .failure(let error):
134+
v.showAlertView(title: nil, message: error.message, animated: true)
135+
}
128136
}
129137
}
130138

Adamant/Wallets/Adamant/AdmWalletRoutes.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ extension AdamantScene.Wallets {
1616
c.dialogService = r.resolve(DialogService.self)
1717
c.currencyInfoService = r.resolve(CurrencyInfoService.self)
1818
c.router = r.resolve(Router.self)
19+
c.accountService = r.resolve(AccountService.self)
1920
return c
2021
}
2122

Adamant/Wallets/Bitcoin/BtcWalletRoutes.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ extension AdamantScene.Wallets {
1515
let c = BtcWalletViewController(nibName: "WalletViewControllerBase", bundle: nil)
1616
c.dialogService = r.resolve(DialogService.self)
1717
c.currencyInfoService = r.resolve(CurrencyInfoService.self)
18+
c.accountService = r.resolve(AccountService.self)
1819
return c
1920
}
2021

Adamant/Wallets/Dash/DashWalletRouter.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ extension AdamantScene.Wallets {
1515
let c = DashWalletViewController(nibName: "WalletViewControllerBase", bundle: nil)
1616
c.dialogService = r.resolve(DialogService.self)
1717
c.currencyInfoService = r.resolve(CurrencyInfoService.self)
18+
c.accountService = r.resolve(AccountService.self)
1819
return c
1920
}
2021

Adamant/Wallets/Doge/DogeWalletRoutes.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ extension AdamantScene.Wallets {
1515
let c = DogeWalletViewController(nibName: "WalletViewControllerBase", bundle: nil)
1616
c.dialogService = r.resolve(DialogService.self)
1717
c.currencyInfoService = r.resolve(CurrencyInfoService.self)
18+
c.accountService = r.resolve(AccountService.self)
1819
return c
1920
}
2021

Adamant/Wallets/ERC20/ERC20TransferViewController.swift

Lines changed: 46 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -66,34 +66,24 @@ class ERC20TransferViewController: TransferViewControllerBase {
6666
switch result {
6767
case .success(let hash):
6868
service.update()
69-
service.getTransaction(by: hash) { result in
70-
switch result {
71-
case .success(let transaction):
72-
vc.dialogService.showSuccess(withMessage: String.adamantLocalized.transfer.transferSuccess)
73-
74-
DispatchQueue.main.async {
75-
if let detailsVc = vc.router.get(scene: AdamantScene.Wallets.ERC20.transactionDetails) as? ERC20TransactionDetailsViewController {
76-
detailsVc.transaction = transaction
77-
detailsVc.service = service
78-
detailsVc.senderName = String.adamantLocalized.transactionDetails.yourAddress
79-
detailsVc.recipientName = self?.recipientName
80-
81-
if comments.count > 0 {
82-
detailsVc.comment = comments
83-
}
69+
vc.dialogService.showSuccess(withMessage: String.adamantLocalized.transfer.transferSuccess)
70+
let transaction = SimpleTransactionDetails(txId: hash, senderAddress: transaction.sender?.address ?? "", recipientAddress: recipient, isOutgoing: true)
71+
DispatchQueue.main.async {
72+
if let detailsVc = vc.router.get(scene: AdamantScene.Wallets.ERC20.transactionDetails) as? ERC20TransactionDetailsViewController {
73+
detailsVc.transaction = transaction
74+
detailsVc.service = service
75+
detailsVc.senderName = String.adamantLocalized.transactionDetails.yourAddress
76+
detailsVc.recipientName = self?.recipientName
8477

85-
vc.delegate?.transferViewController(vc, didFinishWithTransfer: transaction, detailsViewController: detailsVc)
86-
} else {
87-
vc.delegate?.transferViewController(vc, didFinishWithTransfer: transaction, detailsViewController: nil)
88-
}
78+
if comments.count > 0 {
79+
detailsVc.comment = comments
8980
}
9081

91-
case .failure(let error):
92-
vc.dialogService.showRichError(error: error)
93-
vc.delegate?.transferViewController(vc, didFinishWithTransfer: nil, detailsViewController: nil)
82+
vc.delegate?.transferViewController(vc, didFinishWithTransfer: transaction, detailsViewController: detailsVc)
83+
} else {
84+
vc.delegate?.transferViewController(vc, didFinishWithTransfer: transaction, detailsViewController: nil)
9485
}
9586
}
96-
9787
case .failure(let error):
9888
vc.dialogService.showRichError(error: error)
9989
}
@@ -261,4 +251,37 @@ class ERC20TransferViewController: TransferViewControllerBase {
261251
let networkSymbol = service?.tokenNetworkSymbol ?? "ERC20"
262252
return String.adamantLocalized.wallets.erc20.sendToken(service?.tokenSymbol ?? "ERC20") + " (\(networkSymbol))"
263253
}
254+
255+
override func validateAmount(_ amount: Decimal, withFee: Bool = true) -> Bool {
256+
guard amount > 0 else {
257+
return false
258+
}
259+
260+
guard let service = service,
261+
let balance = service.wallet?.balance,
262+
let minAmount = service.wallet?.minAmount
263+
else {
264+
return false
265+
}
266+
267+
guard minAmount <= amount else {
268+
return false
269+
}
270+
271+
let isEnoughBalance = balance >= amount
272+
let isEnoughFee = isEnoughFee()
273+
274+
return isEnoughBalance && isEnoughFee
275+
}
276+
277+
override func isEnoughFee() -> Bool {
278+
guard let service = service,
279+
let rootCoinBalance = rootCoinBalance,
280+
rootCoinBalance >= service.diplayTransactionFee,
281+
service.isTransactionFeeValid
282+
else {
283+
return false
284+
}
285+
return true
286+
}
264287
}

0 commit comments

Comments
 (0)