From 09a1af8f2c61e2f59f0982c40dac7ee3e12122d8 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 3 Nov 2022 12:51:57 -0500 Subject: [PATCH 01/86] Add allowEmpty flag to InputValidator and BtcAddressValidator We will use that for the optional address field in compensation requests and interpret empty input as Optional.empty. Signed-off-by: HenrikJannsen --- .../core/util/validation/BtcAddressValidator.java | 3 +++ .../bisq/core/util/validation/InputValidator.java | 13 ++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/bisq/core/util/validation/BtcAddressValidator.java b/core/src/main/java/bisq/core/util/validation/BtcAddressValidator.java index 38eda4094c..2820d5d81a 100644 --- a/core/src/main/java/bisq/core/util/validation/BtcAddressValidator.java +++ b/core/src/main/java/bisq/core/util/validation/BtcAddressValidator.java @@ -43,6 +43,9 @@ public final class BtcAddressValidator extends InputValidator { } private ValidationResult validateBtcAddress(String input) { + if (allowEmpty && (input == null || input.trim().isEmpty())) { + return new ValidationResult(true); + } try { Address.fromString(Config.baseCurrencyNetworkParameters(), input); return new ValidationResult(true); diff --git a/core/src/main/java/bisq/core/util/validation/InputValidator.java b/core/src/main/java/bisq/core/util/validation/InputValidator.java index 7ce3d68a5e..8be6d60626 100644 --- a/core/src/main/java/bisq/core/util/validation/InputValidator.java +++ b/core/src/main/java/bisq/core/util/validation/InputValidator.java @@ -24,7 +24,11 @@ import java.math.BigInteger; import java.util.Objects; import java.util.function.Function; +import lombok.Setter; + public class InputValidator { + @Setter + public boolean allowEmpty; public ValidationResult validate(String input) { return validateIfNotEmpty(input); @@ -32,10 +36,13 @@ public class InputValidator { protected ValidationResult validateIfNotEmpty(String input) { //trim added to avoid empty input - if (input == null || input.trim().length() == 0) - return new ValidationResult(false, Res.get("validation.empty")); - else + if (allowEmpty) { return new ValidationResult(true); + } else if (input == null || input.trim().length() == 0) { + return new ValidationResult(false, Res.get("validation.empty")); + } else { + return new ValidationResult(true); + } } public static class ValidationResult { From 5c7a3308a7ff1564b7d2a9ee010373b0842338b3 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 3 Nov 2022 13:22:20 -0500 Subject: [PATCH 02/86] Add burningManReceiverAddress as extraMap entry to CompensationProposal. We cannot add a new field as that would break DAO consensus. Add optional text field for burningManReceiverAddress to CompensationProposal UI. Signed-off-by: HenrikJannsen --- .../main/java/bisq/core/dao/DaoFacade.java | 6 ++- .../CompensationProposalFactory.java | 15 ++++-- .../governance/CompensationProposal.java | 15 +++++- .../dao/state/model/governance/Proposal.java | 2 +- .../resources/i18n/displayStrings.properties | 1 + .../main/dao/governance/ProposalDisplay.java | 51 +++++++++++++------ .../dao/governance/make/MakeProposalView.java | 36 +++++++++---- 7 files changed, 91 insertions(+), 35 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/DaoFacade.java b/core/src/main/java/bisq/core/dao/DaoFacade.java index e739c356ba..b4729179d2 100644 --- a/core/src/main/java/bisq/core/dao/DaoFacade.java +++ b/core/src/main/java/bisq/core/dao/DaoFacade.java @@ -252,11 +252,13 @@ public class DaoFacade implements DaoSetupService { // Creation of Proposal and proposalTransaction public ProposalWithTransaction getCompensationProposalWithTransaction(String name, String link, - Coin requestedBsq) + Coin requestedBsq, + Optional burningManReceiverAddress) throws ProposalValidationException, InsufficientMoneyException, TxException { return compensationProposalFactory.createProposalWithTransaction(name, link, - requestedBsq); + requestedBsq, + burningManReceiverAddress); } public ProposalWithTransaction getReimbursementProposalWithTransaction(String name, diff --git a/core/src/main/java/bisq/core/dao/governance/proposal/compensation/CompensationProposalFactory.java b/core/src/main/java/bisq/core/dao/governance/proposal/compensation/CompensationProposalFactory.java index bd307f55a0..fe582c1ec2 100644 --- a/core/src/main/java/bisq/core/dao/governance/proposal/compensation/CompensationProposalFactory.java +++ b/core/src/main/java/bisq/core/dao/governance/proposal/compensation/CompensationProposalFactory.java @@ -40,6 +40,8 @@ import org.bitcoinj.core.Transaction; import javax.inject.Inject; import java.util.HashMap; +import java.util.Map; +import java.util.Optional; import lombok.extern.slf4j.Slf4j; @@ -48,9 +50,9 @@ import lombok.extern.slf4j.Slf4j; */ @Slf4j public class CompensationProposalFactory extends BaseProposalFactory { - private Coin requestedBsq; private String bsqAddress; + private Optional burningManReceiverAddress; @Inject public CompensationProposalFactory(BsqWalletService bsqWalletService, @@ -65,9 +67,11 @@ public class CompensationProposalFactory extends BaseProposalFactory burningManReceiverAddress) throws ProposalValidationException, InsufficientMoneyException, TxException { this.requestedBsq = requestedBsq; + this.burningManReceiverAddress = burningManReceiverAddress; this.bsqAddress = bsqWalletService.getUnusedBsqAddressAsString(); return super.createProposalWithTransaction(name, link); @@ -75,12 +79,17 @@ public class CompensationProposalFactory extends BaseProposalFactory extraDataMap = null; + if (burningManReceiverAddress.isPresent()) { + extraDataMap = new HashMap<>(); + extraDataMap.put(CompensationProposal.BURNING_MAN_RECEIVER_ADDRESS, burningManReceiverAddress.get()); + } return new CompensationProposal( name, link, requestedBsq, bsqAddress, - new HashMap<>()); + extraDataMap); } @Override diff --git a/core/src/main/java/bisq/core/dao/state/model/governance/CompensationProposal.java b/core/src/main/java/bisq/core/dao/state/model/governance/CompensationProposal.java index 4ed48d694b..2eb35f6fb4 100644 --- a/core/src/main/java/bisq/core/dao/state/model/governance/CompensationProposal.java +++ b/core/src/main/java/bisq/core/dao/state/model/governance/CompensationProposal.java @@ -30,11 +30,13 @@ import org.bitcoinj.core.Coin; import java.util.Date; import java.util.Map; +import java.util.Optional; import lombok.EqualsAndHashCode; import lombok.Value; import lombok.extern.slf4j.Slf4j; +import javax.annotation.Nullable; import javax.annotation.concurrent.Immutable; @Immutable @@ -42,6 +44,9 @@ import javax.annotation.concurrent.Immutable; @EqualsAndHashCode(callSuper = true) @Value public final class CompensationProposal extends Proposal implements IssuanceProposal, ImmutableDaoStateModel { + // Keys for extra map + public static final String BURNING_MAN_RECEIVER_ADDRESS = "burningManReceiverAddress"; + private final long requestedBsq; private final String bsqAddress; @@ -49,7 +54,7 @@ public final class CompensationProposal extends Proposal implements IssuanceProp String link, Coin requestedBsq, String bsqAddress, - Map extraDataMap) { + @Nullable Map extraDataMap) { this(name, link, bsqAddress, @@ -72,7 +77,7 @@ public final class CompensationProposal extends Proposal implements IssuanceProp byte version, long creationDate, String txId, - Map extraDataMap) { + @Nullable Map extraDataMap) { super(name, link, version, @@ -135,6 +140,11 @@ public final class CompensationProposal extends Proposal implements IssuanceProp return TxType.COMPENSATION_REQUEST; } + // Added at v.1.9.7 + public Optional getBurningManReceiverAddress() { + return Optional.ofNullable(extraDataMap).flatMap(map -> Optional.ofNullable(map.get(BURNING_MAN_RECEIVER_ADDRESS))); + } + @Override public Proposal cloneProposalAndAddTxId(String txId) { return new CompensationProposal(getName(), @@ -152,6 +162,7 @@ public final class CompensationProposal extends Proposal implements IssuanceProp return "CompensationProposal{" + "\n requestedBsq=" + requestedBsq + ",\n bsqAddress='" + bsqAddress + '\'' + + ",\n burningManReceiverAddress='" + getBurningManReceiverAddress() + '\'' + "\n} " + super.toString(); } } diff --git a/core/src/main/java/bisq/core/dao/state/model/governance/Proposal.java b/core/src/main/java/bisq/core/dao/state/model/governance/Proposal.java index 585ffd9bc8..4fcbe09ebb 100644 --- a/core/src/main/java/bisq/core/dao/state/model/governance/Proposal.java +++ b/core/src/main/java/bisq/core/dao/state/model/governance/Proposal.java @@ -145,7 +145,7 @@ public abstract class Proposal implements PersistablePayload, NetworkPayload, Co "\n txId='" + txId + '\'' + ",\n name='" + name + '\'' + ",\n link='" + link + '\'' + - ",\n txId='" + txId + '\'' + + ",\n extraDataMap='" + extraDataMap + '\'' + ",\n version=" + version + ",\n creationDate=" + new Date(creationDate) + "\n}"; diff --git a/core/src/main/resources/i18n/displayStrings.properties b/core/src/main/resources/i18n/displayStrings.properties index e50348262f..8e92f969ac 100644 --- a/core/src/main/resources/i18n/displayStrings.properties +++ b/core/src/main/resources/i18n/displayStrings.properties @@ -2400,6 +2400,7 @@ dao.proposal.display.name=Exact GitHub username dao.proposal.display.link=Link to detailed info dao.proposal.display.link.prompt=Link to proposal dao.proposal.display.requestedBsq=Requested amount in BSQ +dao.proposal.display.burningManReceiverAddress=Burningman receiver address (optional) dao.proposal.display.txId=Proposal transaction ID dao.proposal.display.proposalFee=Proposal fee dao.proposal.display.myVote=My vote diff --git a/desktop/src/main/java/bisq/desktop/main/dao/governance/ProposalDisplay.java b/desktop/src/main/java/bisq/desktop/main/dao/governance/ProposalDisplay.java index 08c3b83f6f..abeef70dc1 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/governance/ProposalDisplay.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/governance/ProposalDisplay.java @@ -27,7 +27,6 @@ import bisq.desktop.main.MainView; import bisq.desktop.main.dao.DaoView; import bisq.desktop.main.dao.bonding.BondingView; import bisq.desktop.main.dao.bonding.bonds.BondsView; -import bisq.desktop.util.FormBuilder; import bisq.desktop.util.GUIUtil; import bisq.desktop.util.Layout; import bisq.desktop.util.validation.BsqValidator; @@ -58,6 +57,7 @@ import bisq.core.dao.state.model.governance.Vote; import bisq.core.locale.CurrencyUtil; import bisq.core.locale.Res; import bisq.core.util.coin.BsqFormatter; +import bisq.core.util.validation.BtcAddressValidator; import bisq.core.util.validation.InputValidator; import bisq.core.util.validation.RegexValidator; @@ -116,7 +116,7 @@ public class ProposalDisplay { public InputTextField nameTextField; public InputTextField linkInputTextField; @Nullable - public InputTextField requestedBsqTextField, paramValueTextField; + public InputTextField requestedBsqTextField, burningManReceiverAddressTextField, paramValueTextField; @Nullable public ComboBox paramComboBox; @Nullable @@ -133,9 +133,9 @@ public class ProposalDisplay { private int gridRowStartIndex; private final List inputChangedListeners = new ArrayList<>(); @Getter - private List inputControls = new ArrayList<>(); + private final List inputControls = new ArrayList<>(); @Getter - private List> comboBoxes = new ArrayList<>(); + private final List> comboBoxes = new ArrayList<>(); private final ChangeListener focusOutListener; private final ChangeListener inputListener; private ChangeListener paramChangeListener; @@ -143,7 +143,6 @@ public class ProposalDisplay { private TitledGroupBg myVoteTitledGroup; private VBox linkWithIconContainer, comboBoxValueContainer, myVoteBox, voteResultBox; private int votingBoxRowSpan; - private Optional navigateHandlerOptional = Optional.empty(); public ProposalDisplay(GridPane gridPane, @@ -188,6 +187,8 @@ public class ProposalDisplay { switch (proposalType) { case COMPENSATION_REQUEST: + titledGroupBgRowSpan = 6; + break; case REIMBURSEMENT_REQUEST: case CONFISCATE_BOND: case REMOVE_ASSET: @@ -266,7 +267,6 @@ public class ProposalDisplay { case REIMBURSEMENT_REQUEST: requestedBsqTextField = addInputTextField(gridPane, ++gridRow, Res.get("dao.proposal.display.requestedBsq")); - checkNotNull(requestedBsqTextField, "requestedBsqTextField must not be null"); inputControls.add(requestedBsqTextField); if (isMakeProposalScreen) { @@ -280,10 +280,19 @@ public class ProposalDisplay { } requestedBsqTextField.setValidator(bsqValidator); } + + if (proposalType == ProposalType.COMPENSATION_REQUEST) { + burningManReceiverAddressTextField = addInputTextField(gridPane, ++gridRow, + Res.get("dao.proposal.display.burningManReceiverAddress")); + BtcAddressValidator btcAddressValidator = new BtcAddressValidator(); + btcAddressValidator.setAllowEmpty(true); + burningManReceiverAddressTextField.setValidator(btcAddressValidator); + inputControls.add(burningManReceiverAddressTextField); + } break; case CHANGE_PARAM: checkNotNull(gridPane, "gridPane must not be null"); - paramComboBox = FormBuilder.addComboBox(gridPane, ++gridRow, + paramComboBox = addComboBox(gridPane, ++gridRow, Res.get("dao.proposal.display.paramComboBox.label")); comboBoxValueTextFieldIndex = gridRow; checkNotNull(paramComboBox, "paramComboBox must not be null"); @@ -322,7 +331,7 @@ public class ProposalDisplay { paramComboBox.getSelectionModel().selectedItemProperty().addListener(paramChangeListener); break; case BONDED_ROLE: - bondedRoleTypeComboBox = FormBuilder.addComboBox(gridPane, ++gridRow, + bondedRoleTypeComboBox = addComboBox(gridPane, ++gridRow, Res.get("dao.proposal.display.bondedRoleComboBox.label")); comboBoxValueTextFieldIndex = gridRow; checkNotNull(bondedRoleTypeComboBox, "bondedRoleTypeComboBox must not be null"); @@ -354,7 +363,7 @@ public class ProposalDisplay { break; case CONFISCATE_BOND: - confiscateBondComboBox = FormBuilder.addComboBox(gridPane, ++gridRow, + confiscateBondComboBox = addComboBox(gridPane, ++gridRow, Res.get("dao.proposal.display.confiscateBondComboBox.label")); comboBoxValueTextFieldIndex = gridRow; checkNotNull(confiscateBondComboBox, "confiscateBondComboBox must not be null"); @@ -381,7 +390,7 @@ public class ProposalDisplay { case GENERIC: break; case REMOVE_ASSET: - assetComboBox = FormBuilder.addComboBox(gridPane, ++gridRow, + assetComboBox = addComboBox(gridPane, ++gridRow, Res.get("dao.proposal.display.assetComboBox.label")); comboBoxValueTextFieldIndex = gridRow; checkNotNull(assetComboBox, "assetComboBox must not be null"); @@ -530,6 +539,16 @@ public class ProposalDisplay { CompensationProposal compensationProposal = (CompensationProposal) proposal; checkNotNull(requestedBsqTextField, "requestedBsqTextField must not be null"); requestedBsqTextField.setText(bsqFormatter.formatCoinWithCode(compensationProposal.getRequestedBsq())); + if (burningManReceiverAddressTextField != null) { + Optional burningManReceiverAddress = compensationProposal.getBurningManReceiverAddress(); + boolean isPresent = burningManReceiverAddress.isPresent(); + burningManReceiverAddressTextField.setVisible(isPresent); + burningManReceiverAddressTextField.setManaged(isPresent); + if (isPresent) { + burningManReceiverAddressTextField.setText(burningManReceiverAddress.get()); + } + } + } else if (proposal instanceof ReimbursementProposal) { ReimbursementProposal reimbursementProposal = (ReimbursementProposal) proposal; checkNotNull(requestedBsqTextField, "requestedBsqTextField must not be null"); @@ -591,9 +610,9 @@ public class ProposalDisplay { private void addListeners() { inputControls.stream() .filter(Objects::nonNull).forEach(inputControl -> { - inputControl.textProperty().addListener(inputListener); - inputControl.focusedProperty().addListener(focusOutListener); - }); + inputControl.textProperty().addListener(inputListener); + inputControl.focusedProperty().addListener(focusOutListener); + }); comboBoxes.stream() .filter(Objects::nonNull) .forEach(comboBox -> comboBox.getSelectionModel().selectedItemProperty().addListener(inputListener)); @@ -602,9 +621,9 @@ public class ProposalDisplay { public void removeListeners() { inputControls.stream() .filter(Objects::nonNull).forEach(inputControl -> { - inputControl.textProperty().removeListener(inputListener); - inputControl.focusedProperty().removeListener(focusOutListener); - }); + inputControl.textProperty().removeListener(inputListener); + inputControl.focusedProperty().removeListener(focusOutListener); + }); comboBoxes.stream() .filter(Objects::nonNull) .forEach(comboBox -> comboBox.getSelectionModel().selectedItemProperty().removeListener(inputListener)); diff --git a/desktop/src/main/java/bisq/desktop/main/dao/governance/make/MakeProposalView.java b/desktop/src/main/java/bisq/desktop/main/dao/governance/make/MakeProposalView.java index 343a9ee51f..8a4656938e 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/governance/make/MakeProposalView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/governance/make/MakeProposalView.java @@ -296,7 +296,7 @@ public class MakeProposalView extends ActivatableView implements if (requiredBond > availableBalance) { long missing = requiredBond - availableBalance; new Popup().warning(Res.get("dao.proposal.create.missingBsqFundsForBond", - bsqFormatter.formatCoinWithCode(missing))) + bsqFormatter.formatCoinWithCode(missing))) .actionButtonText(Res.get("dao.proposal.create.publish")) .onAction(() -> showFeeInfoAndPublishMyProposal(proposal, transaction, miningFee, txVsize, fee)) .show(); @@ -340,7 +340,11 @@ public class MakeProposalView extends ActivatableView implements } } - private void showFeeInfoAndPublishMyProposal(Proposal proposal, Transaction transaction, Coin miningFee, int txVsize, Coin fee) { + private void showFeeInfoAndPublishMyProposal(Proposal proposal, + Transaction transaction, + Coin miningFee, + int txVsize, + Coin fee) { if (!DevEnv.isDevMode()) { Coin btcForIssuance = null; @@ -394,9 +398,19 @@ public class MakeProposalView extends ActivatableView implements case COMPENSATION_REQUEST: checkNotNull(proposalDisplay.requestedBsqTextField, "proposalDisplay.requestedBsqTextField must not be null"); + + Optional burningManReceiverAddress = Optional.empty(); + if (proposalDisplay.burningManReceiverAddressTextField != null && + proposalDisplay.burningManReceiverAddressTextField.getText() != null && + !proposalDisplay.burningManReceiverAddressTextField.getText().trim().isEmpty()) { + burningManReceiverAddress = Optional.of(proposalDisplay.burningManReceiverAddressTextField.getText()); + } + + Coin requestedBsq = ParsingUtils.parseToCoin(proposalDisplay.requestedBsqTextField.getText(), bsqFormatter); return daoFacade.getCompensationProposalWithTransaction(name, link, - ParsingUtils.parseToCoin(proposalDisplay.requestedBsqTextField.getText(), bsqFormatter)); + requestedBsq, + burningManReceiverAddress); case REIMBURSEMENT_REQUEST: checkNotNull(proposalDisplay.requestedBsqTextField, "proposalDisplay.requestedBsqTextField must not be null"); @@ -504,16 +518,16 @@ public class MakeProposalView extends ActivatableView implements if (proposalDisplay != null) { proposalDisplay.getInputControls().stream() .filter(Objects::nonNull).forEach(e -> { - if (e instanceof InputTextField) { - InputTextField inputTextField = (InputTextField) e; - inputsValid.set(inputsValid.get() && - inputTextField.getValidator() != null && - inputTextField.getValidator().validate(e.getText()).isValid); - } - }); + if (e instanceof InputTextField) { + InputTextField inputTextField = (InputTextField) e; + inputsValid.set(inputsValid.get() && + inputTextField.getValidator() != null && + inputTextField.getValidator().validate(e.getText()).isValid); + } + }); proposalDisplay.getComboBoxes().stream() .filter(Objects::nonNull).forEach(comboBox -> inputsValid.set(inputsValid.get() && - comboBox.getSelectionModel().getSelectedItem() != null)); + comboBox.getSelectionModel().getSelectedItem() != null)); InputTextField linkInputTextField = proposalDisplay.linkInputTextField; inputsValid.set(inputsValid.get() && From ea5662f84d73dfb3bb00dd49410a7cd42d94646b Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 3 Nov 2022 13:50:27 -0500 Subject: [PATCH 03/86] Add new methods to DaoStateService and DaoFacade. Will be used later by BurningMan domain. Signed-off-by: HenrikJannsen --- .../main/java/bisq/core/dao/DaoFacade.java | 21 ++++++++++++++++ .../bisq/core/dao/state/DaoStateService.java | 24 ++++++++++++++++++- 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/bisq/core/dao/DaoFacade.java b/core/src/main/java/bisq/core/dao/DaoFacade.java index b4729179d2..1bd27ecab2 100644 --- a/core/src/main/java/bisq/core/dao/DaoFacade.java +++ b/core/src/main/java/bisq/core/dao/DaoFacade.java @@ -53,6 +53,7 @@ import bisq.core.dao.governance.proposal.reimbursement.ReimbursementConsensus; import bisq.core.dao.governance.proposal.reimbursement.ReimbursementProposalFactory; import bisq.core.dao.governance.proposal.removeAsset.RemoveAssetProposalFactory; import bisq.core.dao.governance.proposal.role.RoleProposalFactory; +import bisq.core.dao.governance.proposal.storage.appendonly.ProposalPayload; import bisq.core.dao.monitoring.DaoStateMonitoringService; import bisq.core.dao.state.DaoStateListener; import bisq.core.dao.state.DaoStateService; @@ -65,8 +66,10 @@ import bisq.core.dao.state.model.blockchain.TxOutputKey; import bisq.core.dao.state.model.blockchain.TxType; import bisq.core.dao.state.model.governance.Ballot; import bisq.core.dao.state.model.governance.BondedRoleType; +import bisq.core.dao.state.model.governance.CompensationProposal; import bisq.core.dao.state.model.governance.Cycle; import bisq.core.dao.state.model.governance.DaoPhase; +import bisq.core.dao.state.model.governance.Issuance; import bisq.core.dao.state.model.governance.IssuanceType; import bisq.core.dao.state.model.governance.Proposal; import bisq.core.dao.state.model.governance.Role; @@ -646,6 +649,24 @@ public class DaoFacade implements DaoSetupService { return daoStateService.getIssuanceSetForType(issuanceType).size(); } + public Set getIssuanceSetForType(IssuanceType issuanceType) { + return daoStateService.getIssuanceSetForType(issuanceType); + } + + public Map> getAddressByOutputKeyMap() { + return daoStateService.getUnorderedTxOutputStream() + .collect(Collectors.toMap(BaseTxOutput::getKey, txOutput -> Optional.ofNullable(txOutput.getAddress()))); + } + + public Optional findCompensationProposal(String txId) { + return proposalService.getProposalPayloads().stream() + .map(ProposalPayload::getProposal) + .filter(proposal -> txId.equals(proposal.getTxId())) + .filter(proposal -> proposal instanceof CompensationProposal) + .map(proposal -> (CompensationProposal) proposal) + .findAny(); + } + public Set getBurntFeeTxs() { return daoStateService.getBurntFeeTxs(); } diff --git a/core/src/main/java/bisq/core/dao/state/DaoStateService.java b/core/src/main/java/bisq/core/dao/state/DaoStateService.java index 2cb1d29206..0f61aa52b2 100644 --- a/core/src/main/java/bisq/core/dao/state/DaoStateService.java +++ b/core/src/main/java/bisq/core/dao/state/DaoStateService.java @@ -201,6 +201,28 @@ public class DaoStateService implements DaoSetupService { return getCycle(blockHeight).map(cycle -> cycle.getHeightOfFirstBlock()); } + public Optional getNextCycle(Cycle cycle) { + return getCycle(cycle.getHeightOfLastBlock() + 1); + } + + public Optional getPreviousCycle(Cycle cycle) { + return getCycle(cycle.getHeightOfFirstBlock() - 1); + } + + public Optional getPastCycle(Cycle cycle, int numPastCycles) { + Optional previous = Optional.empty(); + Cycle current = cycle; + for (int i = 0; i < numPastCycles; i++) { + previous = getPreviousCycle(current); + if (previous.isPresent()) { + current = previous.get(); + } else { + break; + } + } + return previous; + } + /////////////////////////////////////////////////////////////////////////////////////////// // Block @@ -440,7 +462,7 @@ public class DaoStateService implements DaoSetupService { // TxOutput /////////////////////////////////////////////////////////////////////////////////////////// - private Stream getUnorderedTxOutputStream() { + public Stream getUnorderedTxOutputStream() { return getUnorderedTxStream() .flatMap(tx -> tx.getTxOutputs().stream()); } From 739ff8e44746d3041ee7392f2d91a6dbb2b885f3 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 3 Nov 2022 17:14:04 -0500 Subject: [PATCH 04/86] Add BurningMan domain Signed-off-by: HenrikJannsen --- .../core/dao/burningman/BurnOutputModel.java | 61 ++ .../dao/burningman/BurningManCandidate.java | 121 ++++ .../dao/burningman/BurningManService.java | 638 ++++++++++++++++++ .../dao/burningman/CompensationModel.java | 64 ++ .../dao/burningman/ReimbursementModel.java | 52 ++ .../bisq/core/dao/governance/param/Param.java | 6 + .../dao/burningman/BurningManServiceTest.java | 104 +++ 7 files changed, 1046 insertions(+) create mode 100644 core/src/main/java/bisq/core/dao/burningman/BurnOutputModel.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/BurningManService.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/CompensationModel.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/ReimbursementModel.java create mode 100644 core/src/test/java/bisq/core/dao/burningman/BurningManServiceTest.java diff --git a/core/src/main/java/bisq/core/dao/burningman/BurnOutputModel.java b/core/src/main/java/bisq/core/dao/burningman/BurnOutputModel.java new file mode 100644 index 0000000000..458f7e5e26 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/BurnOutputModel.java @@ -0,0 +1,61 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman; + +import java.util.Date; + +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@Getter +@EqualsAndHashCode +public final class BurnOutputModel { + private final long amount; + private final long decayedAmount; + private final int height; + private final String txId; + private final long date; + private final int cycleIndex; + + public BurnOutputModel(long amount, + long decayedAmount, + int height, + String txId, + long date, + int cycleIndex) { + + this.amount = amount; + this.decayedAmount = decayedAmount; + this.height = height; + this.txId = txId; + this.date = date; + this.cycleIndex = cycleIndex; + } + + @Override + public String toString() { + return "\n BurnOutputModel{" + + "\r\n amount=" + amount + + ",\r\n decayedAmount=" + decayedAmount + + ",\r\n height=" + height + + ",\r\n txId='" + txId + '\'' + + ",\r\n date=" + new Date(date) + + ",\r\n cycleIndex=" + cycleIndex + + "\r\n }"; + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java b/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java new file mode 100644 index 0000000000..e4eb682c6f --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java @@ -0,0 +1,121 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Optional; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Getter +@EqualsAndHashCode +public final class BurningManCandidate implements Comparable { + private long accumulatedCompensationAmount; + private long accumulatedDecayedCompensationAmount; + private long accumulatedBurnAmount; + private long accumulatedDecayedBurnAmount; + private long allowedBurnAmount; + private double issuanceShare; // share of accumulated decayed issuance amounts in relation to total issued amounts + private double boostedIssuanceShare; + private double burnOutputShare; // share of accumulated decayed burn amounts in relation to total burned amounts + private double effectiveBurnOutputShare; // limited to boostedIssuanceShare + + private final List compensationModels = new ArrayList<>(); + private final List burnOutputModels = new ArrayList<>(); + + public BurningManCandidate() { + } + + public void addBurnOutputModel(BurnOutputModel burnOutputModel) { + if (burnOutputModels.contains(burnOutputModel)) { + return; + } + burnOutputModels.add(burnOutputModel); + burnOutputModels.sort(Comparator.comparing(BurnOutputModel::getTxId)); + + accumulatedDecayedBurnAmount += burnOutputModel.getDecayedAmount(); + accumulatedBurnAmount += burnOutputModel.getAmount(); + } + + public void addCompensationModel(CompensationModel compensationModel) { + if (compensationModels.contains(compensationModel)) { + return; + } + + compensationModels.add(compensationModel); + compensationModels.sort(Comparator.comparing(CompensationModel::getTxId)); + + accumulatedDecayedCompensationAmount += compensationModel.getDecayedAmount(); + accumulatedCompensationAmount += compensationModel.getAmount(); + } + + public void calculateShare(double totalIssuanceWeight, double totalBurnOutputWeight, long burnTarget) { + issuanceShare = totalIssuanceWeight > 0 ? accumulatedDecayedCompensationAmount / totalIssuanceWeight : 0; + boostedIssuanceShare = issuanceShare * BurningManService.ISSUANCE_BOOST_FACTOR; + + burnOutputShare = totalBurnOutputWeight > 0 ? accumulatedDecayedBurnAmount / totalBurnOutputWeight : 0; + effectiveBurnOutputShare = Math.min(boostedIssuanceShare, burnOutputShare); + + double maxBurnAmount = burnTarget + BurningManService.BURN_TARGET_BOOST_AMOUNT; + if (issuanceShare > 0 && maxBurnAmount > 0 && effectiveBurnOutputShare < boostedIssuanceShare) { + long value = Math.round(boostedIssuanceShare * maxBurnAmount); + // If below dust we set value to 0 + allowedBurnAmount = value < 546 ? 0 : value; + } else { + allowedBurnAmount = 0; + } + } + + public Optional getMostRecentAddress() { + return compensationModels.stream() + .max(Comparator.comparing(CompensationModel::getHeight)) + .map(CompensationModel::getAddress); + } + + //todo do sorting where its needed for better control + @Override + public int compareTo(BurningManCandidate o) { + int result = Double.compare(getBurnOutputShare(), o.getBurnOutputShare()); + if (result == 0 && !compensationModels.isEmpty() && !o.compensationModels.isEmpty()) { + result = compensationModels.get(0).getTxId().compareTo(o.compensationModels.get(0).getTxId()); + } + return result; + } + + @Override + public String toString() { + return "BurningManCandidate{" + + "\r\n accumulatedIssuanceAmount=" + accumulatedCompensationAmount + + ",\r\n accumulatedDecayedIssuanceAmount=" + accumulatedDecayedCompensationAmount + + ",\r\n accumulatedBurnAmount=" + accumulatedBurnAmount + + ",\r\n accumulatedDecayedBurnAmount=" + accumulatedDecayedBurnAmount + + ",\r\n allowedBurnAmount=" + allowedBurnAmount + + ",\r\n issuanceShare=" + issuanceShare + + ",\r\n boostedIssuanceShare=" + boostedIssuanceShare + + ",\r\n burnOutputShare=" + burnOutputShare + + ",\r\n effectiveBurnOutputShare=" + effectiveBurnOutputShare + + ",\r\n compensationModels=" + compensationModels + + ",\r\n burnOutputModels=" + burnOutputModels + + "\r\n}"; + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java new file mode 100644 index 0000000000..7d4f63e352 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -0,0 +1,638 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman; + +import bisq.core.btc.wallet.BsqWalletService; +import bisq.core.dao.governance.param.Param; +import bisq.core.dao.governance.period.CycleService; +import bisq.core.dao.governance.proofofburn.ProofOfBurnConsensus; +import bisq.core.dao.governance.proposal.MyProposalListService; +import bisq.core.dao.governance.proposal.ProposalService; +import bisq.core.dao.governance.proposal.storage.appendonly.ProposalPayload; +import bisq.core.dao.state.DaoStateListener; +import bisq.core.dao.state.DaoStateService; +import bisq.core.dao.state.model.blockchain.BaseTx; +import bisq.core.dao.state.model.blockchain.Block; +import bisq.core.dao.state.model.blockchain.Tx; +import bisq.core.dao.state.model.blockchain.TxOutput; +import bisq.core.dao.state.model.governance.CompensationProposal; +import bisq.core.dao.state.model.governance.Cycle; +import bisq.core.dao.state.model.governance.Issuance; +import bisq.core.dao.state.model.governance.IssuanceType; +import bisq.core.dao.state.model.governance.Proposal; +import bisq.core.dao.state.model.governance.ReimbursementProposal; + +import bisq.network.p2p.storage.P2PDataStorage; + +import bisq.common.util.Hex; +import bisq.common.util.Tuple2; +import bisq.common.util.Utilities; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Charsets; +import com.google.common.collect.ImmutableList; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Random; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Singleton +public class BurningManService implements DaoStateListener { + public static final Date ACTIVATION_DATE = Utilities.getUTCDate(2022, GregorianCalendar.OCTOBER, 25); + private static final double GENESIS_OUTPUT_AMOUNT_FACTOR = 0.1; // Means amounts at genesis height gets reduced to 10% + private static final String GENESIS_OUTPUT_PREFIX = "Co-founder-"; + private static final int MAX_COMP_REQUEST_AGE = 105120; // 2 years in blocks (2*365*144) // 312 for regtest with 2*12*13 (13 is block cycle) + private static final int MAX_BURN_AMOUNT_AGE = 52560; // 1 years in blocks (365*144) // 156 for regtest with 12*13 (13 is block cycle) + private static final int NUM_REIMBURSEMENT_CYCLES = 12; // We use reimbursements of the past 12 cycles + private static final long DEFAULT_EXPECTED_BTC_FEES = 6200000; // Average BTC trade fee revenue per month in BSQ value. Can be changed with DAO parameter voting + static final double ISSUANCE_BOOST_FACTOR = 2; // Contributor can burn 2 times the amount from their issuance share + static final long BURN_TARGET_BOOST_AMOUNT = 10000000; // Burn target gets increased by that amount to give more flexibility. + + public static boolean isActivated() { + return new Date().after(ACTIVATION_DATE); + } + + //todo maybe we should use value from DAO param + public static String getLegacyBurningManAddress() { + return Param.RECIPIENT_BTC_ADDRESS.getDefaultValue(); + } + + private final DaoStateService daoStateService; + private final CycleService cycleService; + private final ProposalService proposalService; + private final MyProposalListService myProposalListService; + private final BsqWalletService bsqWalletService; + + private final Map burningManCandidatesByName = new HashMap<>(); + private final Set reimbursements = new HashSet<>(); + private int currentChainHeight; + private Optional burnTarget = Optional.empty(); + + @Inject + public BurningManService(DaoStateService daoStateService, + CycleService cycleService, + ProposalService proposalService, + MyProposalListService myProposalListService, + BsqWalletService bsqWalletService) { + this.daoStateService = daoStateService; + this.cycleService = cycleService; + this.proposalService = proposalService; + this.myProposalListService = myProposalListService; + this.bsqWalletService = bsqWalletService; + + daoStateService.addDaoStateListener(this); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // DaoStateListener + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public void onParseBlockCompleteAfterBatchProcessing(Block block) { + burningManCandidatesByName.clear(); + reimbursements.clear(); + currentChainHeight = block.getHeight(); + burnTarget = Optional.empty(); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // BurningManCandidates + /////////////////////////////////////////////////////////////////////////////////////////// + + // Based on current block height + public Map getCurrentBurningManCandidatesByName() { + // Cached value is only used for currentChainHeight + if (!burningManCandidatesByName.isEmpty()) { + return burningManCandidatesByName; + } + + burningManCandidatesByName.putAll(getBurningManCandidatesByName(currentChainHeight)); + return burningManCandidatesByName; + } + + // Allows recreation of data model for the given chainHeight + public Map getBurningManCandidatesByName(int chainHeight) { + Map burningManCandidatesByName = new HashMap<>(); + Map> proofOfBurnOpReturnTxOutputByHash = getProofOfBurnOpReturnTxOutputByHash(chainHeight); + + // Add contributors who made a compensation request + daoStateService.getIssuanceSetForType(IssuanceType.COMPENSATION).stream() + .filter(issuance -> issuance.getChainHeight() <= chainHeight) + .forEach(issuance -> { + getCompensationProposalsForIssuance(issuance).forEach(compensationProposal -> { + String name = compensationProposal.getName(); + burningManCandidatesByName.putIfAbsent(name, new BurningManCandidate()); + BurningManCandidate candidate = burningManCandidatesByName.get(name); + + // Issuance + compensationProposal.getBurningManReceiverAddress() + .or(() -> daoStateService.getTx(compensationProposal.getTxId()) + .map(tx -> { + ImmutableList txOutputs = tx.getTxOutputs(); + // The compensation request tx has usually 4 outputs. If there is no BTC change its 3 outputs. + // BTC change output is at index 2 if present otherwise + // we use the BSQ address of the compensation candidate output at index 1. + // See https://docs.bisq.network/dao-technical-overview.html#compensation-request-txreimbursement-request-tx + if (txOutputs.size() == 4) { + return txOutputs.get(2).getAddress(); + } else { + return txOutputs.get(1).getAddress(); + } + })) + .ifPresent(address -> { + int issuanceHeight = issuance.getChainHeight(); + long issuanceAmount; + + // There was a reimbursement for a conference sponsorship with 44776 BSQ. We remove that as well. + // See https://github.com/bisq-network/compensation/issues/498?utm_source=desktop-client&utm_medium=in-app-link&utm_campaign=language_en + boolean wasSponsorship = issuance.getTxId().equals("01455fc4c88fca0665a5f56a90ff03fb9e3e88c3430ffc5217246e32d180aa64"); + if (wasSponsorship) { + issuanceAmount = 119400; // That was the compensation part + } else { + issuanceAmount = issuance.getAmount(); + } + int cycleIndex = getCycleIndex(issuanceHeight); + // Up to cycle 15 the RefundAgent made reimbursement requests as compensation requests. We filter out those entries. + // As it is mixed with RefundAgents real compensation requests we take out all above 3500 BSQ. + boolean isReimbursementOfRefundAgent = name.equals("RefundAgent") && cycleIndex <= 15 && issuanceAmount > 350000; + if (!isReimbursementOfRefundAgent) { + long decayedIssuanceAmount = getDecayedCompensationAmount(issuanceAmount, issuanceHeight, chainHeight); + long issuanceDate = daoStateService.getBlockTime(issuanceHeight); + candidate.addCompensationModel(new CompensationModel(address, + issuanceAmount, + decayedIssuanceAmount, + issuanceHeight, + issuance.getTxId(), + issuanceDate, + cycleIndex)); + } + }); + + addBurnOutputModel(chainHeight, proofOfBurnOpReturnTxOutputByHash, name, candidate); + }); + } + ); + + // Add output receivers of genesis transaction + daoStateService.getGenesisTx() + .ifPresent(tx -> tx.getTxOutputs().forEach(txOutput -> { + String name = GENESIS_OUTPUT_PREFIX + txOutput.getIndex(); + burningManCandidatesByName.putIfAbsent(name, new BurningManCandidate()); + BurningManCandidate candidate = burningManCandidatesByName.get(name); + + // Issuance + int issuanceHeight = txOutput.getBlockHeight(); + long issuanceAmount = txOutput.getValue(); + long decayedAmount = getDecayedGenesisOutputAmount(issuanceAmount); + long issuanceDate = daoStateService.getBlockTime(issuanceHeight); + candidate.addCompensationModel(new CompensationModel(txOutput.getAddress(), + issuanceAmount, + decayedAmount, + issuanceHeight, + txOutput.getTxId(), + issuanceDate, + 0)); + addBurnOutputModel(chainHeight, proofOfBurnOpReturnTxOutputByHash, name, candidate); + })); + + Collection burningManCandidates = burningManCandidatesByName.values(); + double totalDecayedCompensationAmounts = burningManCandidates.stream() + .mapToDouble(BurningManCandidate::getAccumulatedDecayedCompensationAmount) + .sum(); + double totalDecayedBurnAmounts = burningManCandidates.stream() + .mapToDouble(BurningManCandidate::getAccumulatedDecayedBurnAmount) + .sum(); + long burnTarget = getBurnTarget(chainHeight, burningManCandidates); + burningManCandidates.forEach(candidate -> + candidate.calculateShare(totalDecayedCompensationAmounts, totalDecayedBurnAmounts, burnTarget)); + return burningManCandidatesByName; + } + + private Stream getCompensationProposalsForIssuance(Issuance issuance) { + return proposalService.getProposalPayloads().stream() + .map(ProposalPayload::getProposal) + .filter(proposal -> issuance.getTxId().equals(proposal.getTxId())) + .filter(proposal -> proposal instanceof CompensationProposal) + .map(proposal -> (CompensationProposal) proposal); + } + + private Map> getProofOfBurnOpReturnTxOutputByHash(int chainHeight) { + Map> map = new HashMap<>(); + daoStateService.getProofOfBurnOpReturnTxOutputs().stream() + .filter(txOutput -> txOutput.getBlockHeight() <= chainHeight) + .forEach(txOutput -> { + P2PDataStorage.ByteArray key = new P2PDataStorage.ByteArray(ProofOfBurnConsensus.getHashFromOpReturnData(txOutput.getOpReturnData())); + map.putIfAbsent(key, new HashSet<>()); + map.get(key).add(txOutput); + }); + return map; + } + + private void addBurnOutputModel(int chainHeight, + Map> proofOfBurnOpReturnTxOutputByHash, + String name, + BurningManCandidate candidate) { + getProofOfBurnOpReturnTxOutputSetForName(proofOfBurnOpReturnTxOutputByHash, name) + .forEach(burnOutput -> { + int burnOutputHeight = burnOutput.getBlockHeight(); + Optional optionalTx = daoStateService.getTx(burnOutput.getTxId()); + long burnOutputAmount = optionalTx.map(Tx::getBurntBsq).orElse(0L); + long decayedBurnOutputAmount = getDecayedBurnedAmount(burnOutputAmount, burnOutputHeight, chainHeight); + long date = optionalTx.map(BaseTx::getTime).orElse(0L); + int cycleIndex = getCycleIndex(burnOutputHeight); + candidate.addBurnOutputModel(new BurnOutputModel(burnOutputAmount, + decayedBurnOutputAmount, + burnOutputHeight, + burnOutput.getTxId(), + date, + cycleIndex)); + }); + } + + private static Set getProofOfBurnOpReturnTxOutputSetForName(Map> proofOfBurnOpReturnTxOutputByHash, + String name) { + byte[] preImage = name.getBytes(Charsets.UTF_8); + byte[] hash = ProofOfBurnConsensus.getHash(preImage); + P2PDataStorage.ByteArray key = new P2PDataStorage.ByteArray(hash); + if (proofOfBurnOpReturnTxOutputByHash.containsKey(key)) { + return proofOfBurnOpReturnTxOutputByHash.get(key); + } else { + return new HashSet<>(); + } + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Burn target + /////////////////////////////////////////////////////////////////////////////////////////// + + // Burn target using current chain height + public long getCurrentBurnTarget() { + // cached value is only used for currentChainHeight + if (burnTarget.isPresent()) { + return burnTarget.get(); + } + + burnTarget = Optional.of(getBurnTarget(currentChainHeight, getCurrentBurningManCandidatesByName().values())); + return burnTarget.get(); + } + + // Burn target using given chain height. Can be historical state. + public long getBurnTarget(int chainHeight, Collection burningManCandidates) { + Optional optionalCycle = daoStateService.getCycle(chainHeight); + if (optionalCycle.isEmpty()) { + return 0; + } + + Cycle currentCycle = optionalCycle.get(); + int firstBlockOfOldestCycle = daoStateService.getPastCycle(currentCycle, NUM_REIMBURSEMENT_CYCLES) + .map(Cycle::getHeightOfFirstBlock) + .orElse(daoStateService.getGenesisBlockHeight()); + + // Reimbursements + long accumulatedReimbursements = getReimbursements(chainHeight).stream() + .filter(reimbursementModel -> reimbursementModel.getHeight() >= firstBlockOfOldestCycle) + .mapToLong(ReimbursementModel::getAmount) + .sum(); + + // BTC fee revenue + long accumulatedEstimatedBtcTradeFees = 0; + Cycle candidateCycle = currentCycle; + for (int i = 0; i < NUM_REIMBURSEMENT_CYCLES; i++) { + // LOCK_TIME_TRADE_PAYOUT was never used. We re-purpose it as value for BTC fee revenue per cycle. This can be added as oracle data by DAO voting. + // We cannot change the ParamType to BSQ as that would break consensus + long paramValueAsBlock = daoStateService.getParamValueAsBlock(Param.LOCK_TIME_TRADE_PAYOUT, candidateCycle.getHeightOfFirstBlock()); + // Ignore default value (4320) + long estimatedBtcTradeFeesPerCycle = paramValueAsBlock != 4320 ? paramValueAsBlock : DEFAULT_EXPECTED_BTC_FEES; + accumulatedEstimatedBtcTradeFees += estimatedBtcTradeFeesPerCycle; + Optional previousCycle = daoStateService.getPreviousCycle(candidateCycle); + if (previousCycle.isPresent()) { + candidateCycle = previousCycle.get(); + } else { + break; + } + } + + // Burningman + // Legacy burningman use those opReturn data to mark their burn transactions from delayed payout transaction cases. + // opReturn data from delayed payout txs when BM traded with the refund agent: 1701e47e5d8030f444c182b5e243871ebbaeadb5e82f + // opReturn data from delayed payout txs when BM traded with traders who got reimbursed by the DAO: 1701293c488822f98e70e047012f46f5f1647f37deb7 + Set proofOfBurnTxs = daoStateService.getProofOfBurnTxs().stream() + .filter(tx -> tx.getBlockHeight() <= chainHeight) + .filter(tx -> tx.getBlockHeight() >= firstBlockOfOldestCycle) + .collect(Collectors.toSet()); + long burnedAmountFromLegacyBurningManDPT = proofOfBurnTxs.stream() + .filter(e -> { + String hash = Hex.encode(e.getLastTxOutput().getOpReturnData()); + return "1701e47e5d8030f444c182b5e243871ebbaeadb5e82f".equals(hash) || + "1701293c488822f98e70e047012f46f5f1647f37deb7".equals(hash); + }) + .mapToLong(Tx::getBurntBsq) + .sum(); + + // Legacy burningman use those opReturn data to mark their burn transactions from delayed payout transaction cases. + // opReturn data from received BTC fees: 1701721206fe6b40777763de1c741f4fd2706d94775d + long burnedAmountFromLegacyBurningMansBtcFees = proofOfBurnTxs.stream() + .filter(e -> "1701721206fe6b40777763de1c741f4fd2706d94775d".equals(Hex.encode(e.getLastTxOutput().getOpReturnData()))) + .mapToLong(Tx::getBurntBsq) + .sum(); + + // Distributed BurningMen + // burningManCandidates are already filtered with chainHeight + long burnedAmountFromBurningMen = burningManCandidates.stream() + .map(burningManCandidate -> burningManCandidate.getBurnOutputModels().stream() + .filter(burnOutputModel -> burnOutputModel.getHeight() >= firstBlockOfOldestCycle) + .mapToLong(BurnOutputModel::getAmount) + .sum()) + .mapToLong(e -> e) + .sum(); + + return accumulatedReimbursements + + accumulatedEstimatedBtcTradeFees + - burnedAmountFromLegacyBurningManDPT + - burnedAmountFromLegacyBurningMansBtcFees + - burnedAmountFromBurningMen; + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Reimbursements + /////////////////////////////////////////////////////////////////////////////////////////// + + public Set getCurrentReimbursements() { + // cached value is only used for currentChainHeight + if (!reimbursements.isEmpty()) { + return reimbursements; + } + + Set set = getReimbursements(currentChainHeight); + reimbursements.addAll(set); + return reimbursements; + } + + private Set getReimbursements(int chainHeight) { + Set reimbursements = new HashSet<>(); + daoStateService.getIssuanceSetForType(IssuanceType.REIMBURSEMENT).stream() + .filter(issuance -> issuance.getChainHeight() <= chainHeight) + .forEach(issuance -> getReimbursementProposalsForIssuance(issuance) + .forEach(reimbursementProposal -> { + int issuanceHeight = issuance.getChainHeight(); + long issuanceAmount = issuance.getAmount(); + long issuanceDate = daoStateService.getBlockTime(issuanceHeight); + int cycleIndex = getCycleIndex(issuanceHeight); + reimbursements.add(new ReimbursementModel( + issuanceAmount, + issuanceHeight, + issuanceDate, + cycleIndex)); + })); + + + return reimbursements; + } + + private Stream getReimbursementProposalsForIssuance(Issuance issuance) { + return proposalService.getProposalPayloads().stream() + .map(ProposalPayload::getProposal) + .filter(proposal -> issuance.getTxId().equals(proposal.getTxId())) + .filter(proposal -> proposal instanceof ReimbursementProposal) + .map(proposal -> (ReimbursementProposal) proposal); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Contributor names + /////////////////////////////////////////////////////////////////////////////////////////// + + public Optional> findMyGenesisOutputNames() { + return daoStateService.getGenesisTx() + .flatMap(tx -> Optional.ofNullable(bsqWalletService.getTransaction(tx.getId())) + .map(genesisTransaction -> genesisTransaction.getOutputs().stream() + .filter(transactionOutput -> transactionOutput.isMine(bsqWalletService.getWallet())) + .map(transactionOutput -> BurningManService.GENESIS_OUTPUT_PREFIX + transactionOutput.getIndex()) + .collect(Collectors.toSet()) + ) + ); + } + + public Set getMyCompensationRequestNames() { + return myProposalListService.getList().stream() + .filter(proposal -> proposal instanceof CompensationProposal) + .map(Proposal::getName) + .collect(Collectors.toSet()); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Legacy BurningMan + /////////////////////////////////////////////////////////////////////////////////////////// + + public String getBurningManAddressFromParam(int chainHeight) { + return daoStateService.getParamValue(Param.RECIPIENT_BTC_ADDRESS, chainHeight); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // BTC Trade fees + /////////////////////////////////////////////////////////////////////////////////////////// + + public String getBtcFeeReceiverAddress() { + Map burningManCandidatesByName = getCurrentBurningManCandidatesByName(); + if (burningManCandidatesByName.isEmpty()) { + // If there are no compensation requests (e.g. at dev testing) we fall back to the default address + return getBurningManAddressFromParam(currentChainHeight); + } + + // It might be that we do not reach 100% if some entries had a capped effectiveBurnOutputShare. + // We ignore that here as there is no risk for abuse. Each entry in the group would have a higher chance in + // that case. + // effectiveBurnOutputShare is a % value represented as double. Smallest supported value is 0.01% -> 0.0001. + // By multiplying it with 10000 and using Math.floor we limit the candidate to 0.01%. + List burningManCandidates = new ArrayList<>(burningManCandidatesByName.values()); + List amountList = burningManCandidates.stream() + .map(BurningManCandidate::getEffectiveBurnOutputShare) + .map(effectiveBurnOutputShare -> (long) Math.floor(effectiveBurnOutputShare * 10000)) + .filter(value -> value > 0) + .collect(Collectors.toList()); + if (amountList.isEmpty()) { + return getBurningManAddressFromParam(currentChainHeight); + } + int winnerIndex = getRandomIndex(amountList, new Random()); + return burningManCandidates.get(winnerIndex).getMostRecentAddress() + .orElse(getBurningManAddressFromParam(currentChainHeight)); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Delayed payout transactions + /////////////////////////////////////////////////////////////////////////////////////////// + + // We use a snapshot blockHeight to avoid failed trades in case maker and taker have different block heights. + // The selection is deterministic based on DAO data. + // The block height is the last mod(10) height from the range of the last 10-20 blocks (139 -> 120; 140 -> 130, 141 -> 130). + // We do not have the latest dao state by that but can ensure maker and taker have the same block. + public int getBurningManSelectionHeight() { + return getSnapshotHeight(daoStateService.getGenesisBlockHeight(), currentChainHeight, 10); + } + + public List> getDelayedPayoutTxReceivers(int burningManSelectionHeight, + long inputAmount, + long tradeTxFee) { + Collection burningManCandidates = getBurningManCandidatesByName(burningManSelectionHeight).values(); + if (burningManCandidates.isEmpty()) { + // If there are no compensation requests (e.g. at dev testing) we fall back to the legacy BM + return List.of(new Tuple2<>(inputAmount, getBurningManAddressFromParam(burningManSelectionHeight))); + } + + // We need to use the same txFeePerVbyte value for both traders. + // We use the tradeTxFee value which is calculated from the average of taker fee tx size and deposit tx size. + // Otherwise, we would need to sync the fee rate of both traders. + // In case of very large taker fee tx we would get a too high fee, but as fee rate is anyway rather + // arbitrary and volatile we are on the safer side. The delayed payout tx is published long after the + // take offer event and the recommended fee at that moment might be very different to actual + // recommended fee. To avoid that the delayed payout tx would get stuck due too low fees we use a + // min. fee rate of 10 sat/vByte. + + // Deposit tx has a clearly defined structure, so we know the size. It is only one optional output if range amount offer was taken. + // Smallest tx size is 246. With additional change output we add 32. To be safe we use the largest expected size. + double txSize = 278; + long txFeePerVbyte = Math.max(10, Math.round(tradeTxFee / txSize)); + long spendableAmount = getSpendableAmount(burningManCandidates.size(), inputAmount, txFeePerVbyte); + // We only use outputs > 500 sat or at least 2 times the cost for the output (32 bytes). + // If we remove outputs it will be spent as miner fee. + long minOutputAmount = Math.max(500, txFeePerVbyte * 32 * 2); + List> receivers = burningManCandidates.stream() + .filter(candidate -> candidate.getMostRecentAddress().isPresent()) + .map(candidates -> new Tuple2<>(Math.round(candidates.getEffectiveBurnOutputShare() * spendableAmount), + candidates.getMostRecentAddress().get())) + .filter(tuple -> tuple.first >= minOutputAmount) + .sorted(Comparator.comparing(tuple -> tuple.first)) + .collect(Collectors.toList()); + long totalOutputValue = receivers.stream().mapToLong(e -> e.first).sum(); + if (totalOutputValue < spendableAmount) { + long available = spendableAmount - totalOutputValue; + // If the available is larger than 100000 sat (about 20 USD) we send it to legacy BM + // Otherwise we use it as miner fee + if (available > 100000) { + receivers.add(new Tuple2<>(available, getBurningManAddressFromParam(burningManSelectionHeight))); + } + } + return receivers; + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Utils + /////////////////////////////////////////////////////////////////////////////////////////// + + private int getCycleIndex(int height) { + return daoStateService.getCycle(height).map(cycleService::getCycleIndex).orElse(0); + } + + private static long getSpendableAmount(int numOutputs, long inputAmount, long txFeePerVbyte) { + // Output size: 32 bytes + // Tx size without outputs: 51 bytes + int txSize = 51 + numOutputs * 32; + long minerFee = txFeePerVbyte * txSize; + return inputAmount - minerFee; + } + + private long getDecayedCompensationAmount(long amount, int issuanceHeight, int chainHeight) { + return getDecayedAmount(amount, issuanceHeight, chainHeight, chainHeight - MAX_COMP_REQUEST_AGE, 0); + } + + private long getDecayedGenesisOutputAmount(long amount) { + return Math.round(amount * GENESIS_OUTPUT_AMOUNT_FACTOR); + } + + private long getDecayedBurnedAmount(long amount, int issuanceHeight, int chainHeight) { + return getDecayedAmount(amount, + issuanceHeight, + chainHeight, + chainHeight - MAX_BURN_AMOUNT_AGE, + 0); + } + + // Linear decay between currentBlockHeight (100% of amount) and issuanceHeight (firstBlockOffset % of amount) + // Values below firstBlockHeight will use the firstBlockOffset as factor for the amount. + // E.g. if firstBlockOffset is 0.1 the decay goes to 10% and earlier values stay at 10%. + @VisibleForTesting + static long getDecayedAmount(long amount, + int issuanceHeight, + int currentBlockHeight, + int firstBlockHeight, + double firstBlockOffset) { + if (issuanceHeight > currentBlockHeight) + throw new IllegalArgumentException("issuanceHeight must not be larger than currentBlockHeight. issuanceHeight=" + issuanceHeight + "; currentBlockHeight=" + currentBlockHeight); + if (currentBlockHeight < 0) + throw new IllegalArgumentException("currentBlockHeight must not be negative. currentBlockHeight=" + currentBlockHeight); + if (amount < 0) + throw new IllegalArgumentException("amount must not be negative. amount" + amount); + if (issuanceHeight < 0) + throw new IllegalArgumentException("issuanceHeight must not be negative. issuanceHeight=" + issuanceHeight); + + double factor = Math.max(0, (issuanceHeight - firstBlockHeight) / (double) (currentBlockHeight - firstBlockHeight)); + double factorWithOffset = firstBlockOffset + factor * (1 - firstBlockOffset); + long weighted = Math.round(amount * factorWithOffset); + return Math.max(0, weighted); + } + + @VisibleForTesting + static int getRandomIndex(List weights, Random random) { + long sum = weights.stream().mapToLong(n -> n).sum(); + long target = random.longs(0, sum).findFirst().orElseThrow() + 1; + return findIndex(weights, target); + } + + @VisibleForTesting + static int findIndex(List weights, long target) { + int currentRange = 0; + for (int i = 0; i < weights.size(); i++) { + currentRange += weights.get(i); + if (currentRange >= target) { + return i; + } + } + return 0; + } + + // Borrowed from DaoStateSnapshotService. We prefer to not reuse to avoid dependency to an unrelated domain. + @VisibleForTesting + static int getSnapshotHeight(int genesisHeight, int height, int grid) { + return Math.round(Math.max(genesisHeight + 3 * grid, height) / grid) * grid - grid; + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/CompensationModel.java b/core/src/main/java/bisq/core/dao/burningman/CompensationModel.java new file mode 100644 index 0000000000..331836bad8 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/CompensationModel.java @@ -0,0 +1,64 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman; + +import java.util.Date; + +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@Getter +@EqualsAndHashCode +public final class CompensationModel { + private final String address; + private final long amount; + private final long decayedAmount; + private final int height; + private final String txId; + private final long date; + private final int cycleIndex; + + public CompensationModel(String address, + long amount, + long decayedAmount, + int height, + String txId, + long date, + int cycleIndex) { + this.address = address; + this.amount = amount; + this.decayedAmount = decayedAmount; + this.height = height; + this.txId = txId; + this.date = date; + this.cycleIndex = cycleIndex; + } + + @Override + public String toString() { + return "\n CompensationModel{" + + "\r\n address='" + address + '\'' + + ",\r\n amount=" + amount + + ",\r\n decayedAmount=" + decayedAmount + + ",\r\n height=" + height + + ",\r\n txId='" + txId + '\'' + + ",\r\n date=" + new Date(date) + + ",\r\n cycleIndex=" + cycleIndex + + "\r\n }"; + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/ReimbursementModel.java b/core/src/main/java/bisq/core/dao/burningman/ReimbursementModel.java new file mode 100644 index 0000000000..bb7f0f7843 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/ReimbursementModel.java @@ -0,0 +1,52 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman; + +import java.util.Date; + +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@Getter +@EqualsAndHashCode +public final class ReimbursementModel { + private final long amount; + private final int height; + private final long date; + private final int cycleIndex; + + public ReimbursementModel(long amount, + int height, + long date, + int cycleIndex) { + this.amount = amount; + this.height = height; + this.date = date; + this.cycleIndex = cycleIndex; + } + + @Override + public String toString() { + return "\n ReimbursementModel{" + + ",\r\n amount=" + amount + + ",\r\n height=" + height + + ",\r\n date=" + new Date(date) + + ",\r\n cycleIndex=" + cycleIndex + + "\r\n }"; + } +} diff --git a/core/src/main/java/bisq/core/dao/governance/param/Param.java b/core/src/main/java/bisq/core/dao/governance/param/Param.java index 7202c414aa..8ba5258edc 100644 --- a/core/src/main/java/bisq/core/dao/governance/param/Param.java +++ b/core/src/main/java/bisq/core/dao/governance/param/Param.java @@ -117,8 +117,14 @@ public enum Param { // Min required trade volume to not get de-listed. Check starts after trial period and use trial period afterwards to look back for trade activity. ASSET_MIN_VOLUME("0.01", ParamType.BTC, 10, 10), + // LOCK_TIME_TRADE_PAYOUT was never used. + // We re-purpose it as value for BTC fee revenue per cycle. This can be added as oracle data by DAO voting. + // We cannot change the ParamType as that would break consensus LOCK_TIME_TRADE_PAYOUT("4320", ParamType.BLOCK), // 30 days, can be disabled by setting to 0 + + // Not used ARBITRATOR_FEE("0", ParamType.PERCENT), // % of trade. For new trade protocol. Arbitration will become optional and we can apply a fee to it. Initially we start with no fee. + MAX_TRADE_LIMIT("2", ParamType.BTC, 2, 2), // max trade limit for lowest risk payment method. Others will get derived from that. // The base factor to multiply the bonded role amount. E.g. If Twitter admin has 20 as amount and BONDED_ROLE_FACTOR is 1000 we get 20000 BSQ as required bond. diff --git a/core/src/test/java/bisq/core/dao/burningman/BurningManServiceTest.java b/core/src/test/java/bisq/core/dao/burningman/BurningManServiceTest.java new file mode 100644 index 0000000000..7659518828 --- /dev/null +++ b/core/src/test/java/bisq/core/dao/burningman/BurningManServiceTest.java @@ -0,0 +1,104 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman; + + +import com.google.common.primitives.Longs; + +import java.util.List; +import java.util.Random; + +import org.mockito.junit.MockitoJUnitRunner; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.assertEquals; + +@RunWith(MockitoJUnitRunner.class) +public class BurningManServiceTest { + + @Test + public void testGetSnapshotHeight() { + assertEquals(120, BurningManService.getSnapshotHeight(102, 0, 10)); + assertEquals(120, BurningManService.getSnapshotHeight(102, 100, 10)); + assertEquals(120, BurningManService.getSnapshotHeight(102, 102, 10)); + assertEquals(120, BurningManService.getSnapshotHeight(102, 119, 10)); + assertEquals(120, BurningManService.getSnapshotHeight(102, 120, 10)); + assertEquals(120, BurningManService.getSnapshotHeight(102, 121, 10)); + assertEquals(120, BurningManService.getSnapshotHeight(102, 130, 10)); + assertEquals(120, BurningManService.getSnapshotHeight(102, 139, 10)); + assertEquals(130, BurningManService.getSnapshotHeight(102, 140, 10)); + assertEquals(130, BurningManService.getSnapshotHeight(102, 141, 10)); + assertEquals(990, BurningManService.getSnapshotHeight(102, 1000, 10)); + } + + @Test + public void testGetDecayedAmount() { + long amount = 100; + int currentBlockHeight = 1400; + int genesisBlockHeight = 1000; + assertEquals(0, BurningManService.getDecayedAmount(amount, 1000, currentBlockHeight, genesisBlockHeight, 0)); + assertEquals(25, BurningManService.getDecayedAmount(amount, 1100, currentBlockHeight, genesisBlockHeight, 0)); + assertEquals(50, BurningManService.getDecayedAmount(amount, 1200, currentBlockHeight, genesisBlockHeight, 0)); + assertEquals(75, BurningManService.getDecayedAmount(amount, 1300, currentBlockHeight, genesisBlockHeight, 0)); + + // let genesis have an offset. e.g. 0.5 means an amount at genesis has 50% decay + assertEquals(50, BurningManService.getDecayedAmount(amount, 1000, currentBlockHeight, genesisBlockHeight, 0.5)); + assertEquals(75, BurningManService.getDecayedAmount(amount, 1200, currentBlockHeight, genesisBlockHeight, 0.5)); + assertEquals(100, BurningManService.getDecayedAmount(amount, 1400, currentBlockHeight, genesisBlockHeight, 0.5)); + + assertEquals(50, BurningManService.getDecayedAmount(amount, 1200, currentBlockHeight, genesisBlockHeight, 0)); + assertEquals(75, BurningManService.getDecayedAmount(amount, 1200, currentBlockHeight, genesisBlockHeight, 0.5)); + assertEquals(63, BurningManService.getDecayedAmount(amount, 1200, currentBlockHeight, genesisBlockHeight, 0.25)); + assertEquals(88, BurningManService.getDecayedAmount(amount, 1200, currentBlockHeight, genesisBlockHeight, 0.75)); + + + assertEquals(100, BurningManService.getDecayedAmount(amount, 1000, currentBlockHeight, genesisBlockHeight, 1)); + assertEquals(100, BurningManService.getDecayedAmount(amount, 1200, currentBlockHeight, genesisBlockHeight, 1)); + assertEquals(100, BurningManService.getDecayedAmount(amount, 1400, currentBlockHeight, genesisBlockHeight, 1)); + } + + @Test + public void testGetRandomIndex() { + Random rnd = new Random(456); + int[] selections = new int[3]; + for (int i = 0; i < 6000; i++) { + selections[BurningManService.getRandomIndex(Longs.asList(1, 2, 3), rnd)]++; + } + // selections with new Random(456) are: [986, 1981, 3033] + assertEquals(1000.0, selections[0], 100); + assertEquals(2000.0, selections[1], 100); + assertEquals(3000.0, selections[2], 100); + } + + @Test + public void testFindIndex() { + List weights = Longs.asList(1, 2, 3); + assertEquals(0, BurningManService.findIndex(weights, 1)); + assertEquals(1, BurningManService.findIndex(weights, 2)); + assertEquals(1, BurningManService.findIndex(weights, 3)); + assertEquals(2, BurningManService.findIndex(weights, 4)); + assertEquals(2, BurningManService.findIndex(weights, 5)); + assertEquals(2, BurningManService.findIndex(weights, 6)); + + // invalid values return index 0 + assertEquals(0, BurningManService.findIndex(weights, 0)); + assertEquals(0, BurningManService.findIndex(weights, 7)); + } +} From 5167f605b45088e8ac63cbd6a36b84d98b78ea54 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 3 Nov 2022 17:26:25 -0500 Subject: [PATCH 05/86] Add new addTableViewWithHeaderAndFilterField method to FormBuilder (will be used later) Change return type of FormBuilder.addTableViewWithHeader Signed-off-by: HenrikJannsen --- .../main/dao/bonding/bonds/BondsView.java | 3 +- .../bonding/reputation/MyReputationView.java | 3 +- .../main/dao/bonding/roles/RolesView.java | 12 ++-- .../dao/burnbsq/assetfee/AssetFeeView.java | 3 +- .../burnbsq/proofofburn/ProofOfBurnView.java | 6 +- .../java/bisq/desktop/util/FormBuilder.java | 68 +++++++++++++++---- 6 files changed, 72 insertions(+), 23 deletions(-) diff --git a/desktop/src/main/java/bisq/desktop/main/dao/bonding/bonds/BondsView.java b/desktop/src/main/java/bisq/desktop/main/dao/bonding/bonds/BondsView.java index 704a14f8df..e78e6cc37f 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/bonding/bonds/BondsView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/bonding/bonds/BondsView.java @@ -93,7 +93,8 @@ public class BondsView extends ActivatableView { @Override public void initialize() { - tableView = FormBuilder.addTableViewWithHeader(root, ++gridRow, Res.get("dao.bond.allBonds.header"), "last"); + tableView = FormBuilder.addTableViewWithHeader(root, ++gridRow, + Res.get("dao.bond.allBonds.header"), "last").first; tableView.setItems(sortedList); GridPane.setVgrow(tableView, Priority.ALWAYS); addColumns(); diff --git a/desktop/src/main/java/bisq/desktop/main/dao/bonding/reputation/MyReputationView.java b/desktop/src/main/java/bisq/desktop/main/dao/bonding/reputation/MyReputationView.java index 5510e195e8..964c436be3 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/bonding/reputation/MyReputationView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/bonding/reputation/MyReputationView.java @@ -141,7 +141,8 @@ public class MyReputationView extends ActivatableView implements lockupButton = addButtonAfterGroup(root, ++gridRow, Res.get("dao.bond.reputation.lockupButton")); - tableView = FormBuilder.addTableViewWithHeader(root, ++gridRow, Res.get("dao.bond.reputation.table.header"), 20, "last"); + tableView = FormBuilder.addTableViewWithHeader(root, ++gridRow, + Res.get("dao.bond.reputation.table.header"), 20, "last").first; createColumns(); tableView.setItems(sortedList); GridPane.setVgrow(tableView, Priority.ALWAYS); diff --git a/desktop/src/main/java/bisq/desktop/main/dao/bonding/roles/RolesView.java b/desktop/src/main/java/bisq/desktop/main/dao/bonding/roles/RolesView.java index a06d8c8c54..64209846e2 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/bonding/roles/RolesView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/bonding/roles/RolesView.java @@ -23,9 +23,9 @@ import bisq.desktop.components.AutoTooltipButton; import bisq.desktop.components.AutoTooltipTableColumn; import bisq.desktop.components.ExternalHyperlink; import bisq.desktop.components.HyperlinkWithIcon; -import bisq.desktop.main.dao.bonding.BondingViewUtils; import bisq.desktop.main.dao.MessageSignatureWindow; import bisq.desktop.main.dao.MessageVerificationWindow; +import bisq.desktop.main.dao.bonding.BondingViewUtils; import bisq.desktop.util.FormBuilder; import bisq.desktop.util.GUIUtil; @@ -92,7 +92,8 @@ public class RolesView extends ActivatableView { @Override public void initialize() { int gridRow = 0; - tableView = FormBuilder.addTableViewWithHeader(root, gridRow, Res.get("dao.bond.bondedRoles"), "last"); + tableView = FormBuilder.addTableViewWithHeader(root, gridRow, + Res.get("dao.bond.bondedRoles"), "last").first; createColumns(); tableView.setItems(sortedList); GridPane.setVgrow(tableView, Priority.ALWAYS); @@ -294,6 +295,7 @@ public class RolesView extends ActivatableView { public TableCell call(TableColumn column) { return new TableCell<>() { HBox hbox; + @Override public void updateItem(final RolesListItem item, boolean empty) { super.updateItem(item, empty); @@ -315,13 +317,15 @@ public class RolesView extends ActivatableView { if (item.isLockupButtonVisible()) { AutoTooltipButton buttonLockup = new AutoTooltipButton(Res.get("dao.bond.table.button.lockup")); buttonLockup.setMinWidth(70); - buttonLockup.setOnAction(e -> bondingViewUtils.lockupBondForBondedRole(item.getRole(), txId -> {})); + buttonLockup.setOnAction(e -> bondingViewUtils.lockupBondForBondedRole(item.getRole(), txId -> { + })); hbox.getChildren().add(buttonLockup); } if (item.isRevokeButtonVisible()) { AutoTooltipButton buttonRevoke = new AutoTooltipButton(Res.get("dao.bond.table.button.revoke")); buttonRevoke.setMinWidth(70); - buttonRevoke.setOnAction(e -> bondingViewUtils.unLock(item.getLockupTxId(), txId -> {})); + buttonRevoke.setOnAction(e -> bondingViewUtils.unLock(item.getLockupTxId(), txId -> { + })); hbox.getChildren().add(buttonRevoke); } hbox.setMinWidth(hbox.getChildren().size() * 70); diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/assetfee/AssetFeeView.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/assetfee/AssetFeeView.java index e0c4ec30be..dac67dfb0a 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/assetfee/AssetFeeView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/assetfee/AssetFeeView.java @@ -151,7 +151,8 @@ public class AssetFeeView extends ActivatableView implements Bsq payFeeButton = addButtonAfterGroup(root, ++gridRow, Res.get("dao.burnBsq.payFee")); - tableView = FormBuilder.addTableViewWithHeader(root, ++gridRow, Res.get("dao.burnBsq.allAssets"), 20, "last"); + tableView = FormBuilder.addTableViewWithHeader(root, ++gridRow, + Res.get("dao.burnBsq.allAssets"), 20, "last").first; createColumns(); tableView.setItems(sortedList); diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/proofofburn/ProofOfBurnView.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/proofofburn/ProofOfBurnView.java index 92f1ea8c9e..daeb37907d 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/proofofburn/ProofOfBurnView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/proofofburn/ProofOfBurnView.java @@ -143,11 +143,13 @@ public class ProofOfBurnView extends ActivatableView implements hashTextField = addTopLabelTextField(root, ++gridRow, Res.get("dao.proofOfBurn.hash")).second; burnButton = addButtonAfterGroup(root, ++gridRow, Res.get("dao.proofOfBurn.burn")); - myItemsTableView = FormBuilder.addTableViewWithHeader(root, ++gridRow, Res.get("dao.proofOfBurn.myItems"), 30); + myItemsTableView = FormBuilder.addTableViewWithHeader(root, ++gridRow, + Res.get("dao.proofOfBurn.myItems"), 30).first; createColumnsForMyItems(); myItemsTableView.setItems(myItemsSortedList); - allTxsTableView = FormBuilder.addTableViewWithHeader(root, ++gridRow, Res.get("dao.proofOfBurn.allTxs"), 30, "last"); + allTxsTableView = FormBuilder.addTableViewWithHeader(root, ++gridRow, + Res.get("dao.proofOfBurn.allTxs"), 30, "last").first; createColumnsForAllTxs(); allTxsTableView.setItems(allItemsSortedList); diff --git a/desktop/src/main/java/bisq/desktop/util/FormBuilder.java b/desktop/src/main/java/bisq/desktop/util/FormBuilder.java index 3d006b7854..33544b5369 100644 --- a/desktop/src/main/java/bisq/desktop/util/FormBuilder.java +++ b/desktop/src/main/java/bisq/desktop/util/FormBuilder.java @@ -195,7 +195,10 @@ public class FormBuilder { return addSimpleMarkdownLabel(gridPane, rowIndex, null, 0); } - public static SimpleMarkdownLabel addSimpleMarkdownLabel(GridPane gridPane, int rowIndex, String markdown, double top) { + public static SimpleMarkdownLabel addSimpleMarkdownLabel(GridPane gridPane, + int rowIndex, + String markdown, + double top) { SimpleMarkdownLabel label = new SimpleMarkdownLabel(markdown); GridPane.setRowIndex(label, rowIndex); @@ -903,7 +906,6 @@ public class FormBuilder { } - /////////////////////////////////////////////////////////////////////////////////////////// // Label + InputTextField + Button /////////////////////////////////////////////////////////////////////////////////////////// @@ -2384,26 +2386,31 @@ public class FormBuilder { } } - public static TableView addTableViewWithHeader(GridPane gridPane, int rowIndex, String headerText) { + public static Tuple2, TitledGroupBg> addTableViewWithHeader(GridPane gridPane, + int rowIndex, + String headerText) { return addTableViewWithHeader(gridPane, rowIndex, headerText, 0, null); } - public static TableView addTableViewWithHeader(GridPane gridPane, - int rowIndex, - String headerText, - String groupStyle) { + public static Tuple2, TitledGroupBg> addTableViewWithHeader(GridPane gridPane, + int rowIndex, + String headerText, + String groupStyle) { return addTableViewWithHeader(gridPane, rowIndex, headerText, 0, groupStyle); } - public static TableView addTableViewWithHeader(GridPane gridPane, int rowIndex, String headerText, int top) { + public static Tuple2, TitledGroupBg> addTableViewWithHeader(GridPane gridPane, + int rowIndex, + String headerText, + int top) { return addTableViewWithHeader(gridPane, rowIndex, headerText, top, null); } - public static TableView addTableViewWithHeader(GridPane gridPane, - int rowIndex, - String headerText, - int top, - String groupStyle) { + public static Tuple2, TitledGroupBg> addTableViewWithHeader(GridPane gridPane, + int rowIndex, + String headerText, + int top, + String groupStyle) { TitledGroupBg titledGroupBg = addTitledGroupBg(gridPane, rowIndex, 1, headerText, top); if (groupStyle != null) titledGroupBg.getStyleClass().add(groupStyle); @@ -2414,7 +2421,40 @@ public class FormBuilder { gridPane.getChildren().add(tableView); tableView.setPlaceholder(new AutoTooltipLabel(Res.get("table.placeholder.noData"))); tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); - return tableView; + return new Tuple2<>(tableView, titledGroupBg); + } + + public static Tuple3, HBox> addTableViewWithHeaderAndFilterField(GridPane gridPane, + int rowIndex, + String headerText, + String filterPromptText, + int top) { + TitledGroupBg titledGroupBg = new TitledGroupBg(); + titledGroupBg.setText(headerText); + + InputTextField filterField = new InputTextField(); + filterField.setLabelFloat(true); + filterField.setPromptText(filterPromptText); + filterField.setMinWidth(200); + + Region spacer = new Region(); + HBox hBox = new HBox(20, titledGroupBg, spacer, filterField); + HBox.setHgrow(spacer, Priority.ALWAYS); + HBox.setMargin(filterField, new Insets(-12, 2, 0, 0)); + + hBox.prefWidthProperty().bind(gridPane.widthProperty()); + GridPane.setRowIndex(hBox, rowIndex); + GridPane.setRowSpan(hBox, 1); + GridPane.setMargin(hBox, new Insets(top + 8, -10, -12, -10)); + gridPane.getChildren().add(hBox); + + TableView tableView = new TableView<>(); + GridPane.setRowIndex(tableView, rowIndex); + GridPane.setMargin(tableView, new Insets(top + 30, -10, 5, -10)); + gridPane.getChildren().add(tableView); + tableView.setPlaceholder(new AutoTooltipLabel(Res.get("table.placeholder.noData"))); + tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); + return new Tuple3<>(filterField, tableView, hBox); } } From 39a49adb924495772dbfd09d5c79c0c049e0bc29 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 3 Nov 2022 17:43:31 -0500 Subject: [PATCH 06/86] Add Burningman UI Signed-off-by: HenrikJannsen --- .../resources/i18n/displayStrings.properties | 40 +- .../desktop/main/dao/burnbsq/BurnBsqView.java | 27 +- .../burningmen/BurnOutputListItem.java | 51 + .../burningmen/BurningmenListItem.java | 66 ++ .../burnbsq/burningmen/BurningmenView.fxml | 28 + .../burnbsq/burningmen/BurningmenView.java | 1045 +++++++++++++++++ .../burningmen/CompensationListItem.java | 52 + .../burningmen/ReimbursementListItem.java | 48 + 8 files changed, 1344 insertions(+), 13 deletions(-) create mode 100644 desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java create mode 100644 desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java create mode 100644 desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.fxml create mode 100644 desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java create mode 100644 desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java create mode 100644 desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java diff --git a/core/src/main/resources/i18n/displayStrings.properties b/core/src/main/resources/i18n/displayStrings.properties index 8e92f969ac..c90ef044e1 100644 --- a/core/src/main/resources/i18n/displayStrings.properties +++ b/core/src/main/resources/i18n/displayStrings.properties @@ -1967,7 +1967,7 @@ dao.tab.factsAndFigures=Facts & Figures dao.tab.bsqWallet=BSQ wallet dao.tab.proposals=Governance dao.tab.bonding=Bonding -dao.tab.proofOfBurn=Asset listing fee/Proof of burn +dao.tab.proofOfBurn=Proof of burn dao.tab.monitor=Network monitor dao.tab.news=News @@ -2097,7 +2097,9 @@ dao.param.ASSET_LISTING_FEE_PER_DAY=Asset listing fee per day dao.param.ASSET_MIN_VOLUME=Min. trade volume for assets # suppress inspection "UnusedProperty" -dao.param.LOCK_TIME_TRADE_PAYOUT=Lock time for alternative trade payout tx +# dao.param.LOCK_TIME_TRADE_PAYOUT=Lock time for alternative trade payout tx +## Was never used and got re-purposed for expected BTC fee revenue per cycle +dao.param.LOCK_TIME_TRADE_PAYOUT=BTC fee revenue / cycle as BSQ Satoshi value # suppress inspection "UnusedProperty" dao.param.ARBITRATOR_FEE=Arbitrator fee in BTC @@ -2261,6 +2263,7 @@ dao.bond.bondedRoleType.BTC_DONATION_ADDRESS_OWNER=BTC donation address owner dao.burnBsq.assetFee=Asset listing dao.burnBsq.menuItem.assetFee=Asset listing fee dao.burnBsq.menuItem.proofOfBurn=Proof of burn +dao.burnBsq.menuItem.burningMan=Burningmen dao.burnBsq.header=Fee for asset listing dao.burnBsq.selectAsset=Select Asset dao.burnBsq.fee=Fee @@ -2276,6 +2279,39 @@ dao.burnBsq.assets.totalFee=Total fees paid dao.burnBsq.assets.days={0} days dao.burnBsq.assets.toFewDays=The asset fee is too low. The min. amount of days for the trial period is {0}. +dao.burningmen.target.header=Burn target +dao.burningmen.burn.header=Burn BSQ +dao.burningmen.amount.prompt=Amount to burn +dao.burningmen.amount.prompt.max=Amount to burn (max.: {0}) +dao.burningmen.candidates.table.header=Burningmen candidates +dao.burningmen.burnOutput.table.header=Burn outputs +dao.burningmen.reimbursement.table.header=Reimbursement requests +dao.burningmen.issuance.table.header=Issuances +dao.burningmen.currentBlockHeight=Current block height +dao.burningmen.burnTarget=Amount of BSQ to burn for off-setting reimbursements and BTC trade fees +dao.burningmen.localCoFounderNames=My co-founder name(s) +dao.burningmen.filter=Filter burningman candidates +dao.burningmen.toggle=Show only active burningmen +dao.burningmen.preImage=Contributor name (pre-image) +dao.burningmen.contributorsComboBox.prompt=Select any of my contributors + +dao.burningmen.selectedContributor=Selected contributor +dao.burningmen.selectedContributor.label=Contributor name +dao.burningmen.table.name=Contributor name +dao.burningmen.table.burnAmount=Burned amount +dao.burningmen.table.allowedBurnAmount=Allowed amount to burn +dao.burningmen.table.decayedBurnAmount=Decayed burned amount +dao.burningmen.table.burnOutputShare=Receiver share +dao.burningmen.table.numBurnOutputs=Num. Burns +dao.burningmen.table.issuanceAmount=Issued amount +dao.burningmen.table.decayedIssuanceAmount=Decayed issued amount +dao.burningmen.table.issuanceShare=Issuance share +dao.burningmen.table.numIssuances=Num. issuances +dao.burningmen.table.reimbursedAmount=Reimbursed amount +dao.burningmen.shared.table.height=Block height +dao.burningmen.shared.table.cycle=Cycle +dao.burningmen.shared.table.date=Date + # suppress inspection "UnusedProperty" dao.assetState.UNDEFINED=Undefined # suppress inspection "UnusedProperty" diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/BurnBsqView.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/BurnBsqView.java index 882da4aedf..500c3becf1 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/BurnBsqView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/BurnBsqView.java @@ -28,6 +28,7 @@ import bisq.desktop.components.MenuItem; import bisq.desktop.main.MainView; import bisq.desktop.main.dao.DaoView; import bisq.desktop.main.dao.burnbsq.assetfee.AssetFeeView; +import bisq.desktop.main.dao.burnbsq.burningmen.BurningmenView; import bisq.desktop.main.dao.burnbsq.proofofburn.ProofOfBurnView; import bisq.core.locale.Res; @@ -49,7 +50,7 @@ public class BurnBsqView extends ActivatableView { private final ViewLoader viewLoader; private final Navigation navigation; - private MenuItem assetFee, proofOfBurn; + private MenuItem proofOfBurn, burningmen, assetFee; private Navigation.Listener listener; @FXML @@ -77,26 +78,28 @@ public class BurnBsqView extends ActivatableView { }; toggleGroup = new ToggleGroup(); - final List> baseNavPath = Arrays.asList(MainView.class, DaoView.class, BurnBsqView.class); - assetFee = new MenuItem(navigation, toggleGroup, Res.get("dao.burnBsq.menuItem.assetFee"), - AssetFeeView.class, baseNavPath); + List> baseNavPath = Arrays.asList(MainView.class, DaoView.class, BurnBsqView.class); proofOfBurn = new MenuItem(navigation, toggleGroup, Res.get("dao.burnBsq.menuItem.proofOfBurn"), ProofOfBurnView.class, baseNavPath); - - leftVBox.getChildren().addAll(assetFee, proofOfBurn); + burningmen = new MenuItem(navigation, toggleGroup, Res.get("dao.burnBsq.menuItem.burningMan"), + BurningmenView.class, baseNavPath); + assetFee = new MenuItem(navigation, toggleGroup, Res.get("dao.burnBsq.menuItem.assetFee"), + AssetFeeView.class, baseNavPath); + leftVBox.getChildren().addAll(burningmen, proofOfBurn, assetFee); } @Override protected void activate() { - assetFee.activate(); proofOfBurn.activate(); + burningmen.activate(); + assetFee.activate(); navigation.addListener(listener); ViewPath viewPath = navigation.getCurrentPath(); if (viewPath.size() == 3 && viewPath.indexOf(BurnBsqView.class) == 2 || viewPath.size() == 2 && viewPath.indexOf(DaoView.class) == 1) { if (selectedViewClass == null) - selectedViewClass = AssetFeeView.class; + selectedViewClass = BurningmenView.class; loadView(selectedViewClass); @@ -111,15 +114,17 @@ public class BurnBsqView extends ActivatableView { protected void deactivate() { navigation.removeListener(listener); - assetFee.deactivate(); proofOfBurn.deactivate(); + burningmen.deactivate(); + assetFee.deactivate(); } private void loadView(Class viewClass) { View view = viewLoader.load(viewClass); content.getChildren().setAll(view.getRoot()); - if (view instanceof AssetFeeView) toggleGroup.selectToggle(assetFee); - else if (view instanceof ProofOfBurnView) toggleGroup.selectToggle(proofOfBurn); + if (view instanceof ProofOfBurnView) toggleGroup.selectToggle(proofOfBurn); + else if (view instanceof BurningmenView) toggleGroup.selectToggle(burningmen); + else if (view instanceof AssetFeeView) toggleGroup.selectToggle(assetFee); } } diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java new file mode 100644 index 0000000000..d1316c1334 --- /dev/null +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java @@ -0,0 +1,51 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.desktop.main.dao.burnbsq.burningmen; + +import bisq.desktop.util.DisplayUtils; + +import bisq.core.dao.burningman.BurnOutputModel; +import bisq.core.util.coin.BsqFormatter; + +import java.util.Date; + +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@Getter +@EqualsAndHashCode +class BurnOutputListItem { + private final BurnOutputModel burnOutputModel; + private final String dateAsString, txId, amountAsString, decayedAmountAsString; + private final long date, amount, decayedAmount; + private final int cycleIndex, height; + + BurnOutputListItem(BurnOutputModel model, BsqFormatter bsqFormatter) { + this.burnOutputModel = model; + + height = model.getHeight(); + cycleIndex = model.getCycleIndex(); + date = model.getDate(); + dateAsString = DisplayUtils.formatDateTime(new Date(date)); + txId = model.getTxId(); + amount = model.getAmount(); + amountAsString = bsqFormatter.formatCoinWithCode(amount); + decayedAmount = model.getDecayedAmount(); + decayedAmountAsString = bsqFormatter.formatCoinWithCode(decayedAmount); + } +} diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java new file mode 100644 index 0000000000..de2a73d275 --- /dev/null +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java @@ -0,0 +1,66 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.desktop.main.dao.burnbsq.burningmen; + +import bisq.core.dao.burningman.BurningManCandidate; +import bisq.core.util.FormattingUtils; +import bisq.core.util.coin.BsqFormatter; + +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@Getter +@EqualsAndHashCode +class BurningmenListItem { + private final BurningManCandidate burningManCandidate; + private final String name, burnOutputShareAsString, effectiveBurnOutputShareAsString, issuanceShareAsString, + accumulatedDecayedBurnAmountAsBsq, allowedBurnAmountAsBsq, accumulatedBurnAmountAsBsq, + accumulatedDecayedCompensationAmountAsBsq, accumulatedCompensationAmountAsBsq; + private final long allowedBurnAmount, accumulatedDecayedBurnAmount, accumulatedBurnAmount, + accumulatedDecayedCompensationAmount, accumulatedCompensationAmount; + private final int numBurnOutputs, numIssuances; + private final double burnOutputShare, effectiveBurnOutputShare, issuanceShare; + + BurningmenListItem(String name, BurningManCandidate burningManCandidate, BsqFormatter bsqFormatter) { + this.burningManCandidate = burningManCandidate; + + this.name = name; + + // Burn + allowedBurnAmount = burningManCandidate.getAllowedBurnAmount(); + allowedBurnAmountAsBsq = bsqFormatter.formatCoinWithCode(allowedBurnAmount); + accumulatedBurnAmount = burningManCandidate.getAccumulatedBurnAmount(); + accumulatedBurnAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedBurnAmount); + accumulatedDecayedBurnAmount = burningManCandidate.getAccumulatedDecayedBurnAmount(); + accumulatedDecayedBurnAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedDecayedBurnAmount); + burnOutputShare = burningManCandidate.getBurnOutputShare(); + burnOutputShareAsString = FormattingUtils.formatToPercentWithSymbol(burnOutputShare); + effectiveBurnOutputShare = burningManCandidate.getEffectiveBurnOutputShare(); + effectiveBurnOutputShareAsString = FormattingUtils.formatToPercentWithSymbol(effectiveBurnOutputShare); + numBurnOutputs = burningManCandidate.getBurnOutputModels().size(); + + // Issuance + accumulatedCompensationAmount = burningManCandidate.getAccumulatedCompensationAmount(); + accumulatedCompensationAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedCompensationAmount); + accumulatedDecayedCompensationAmount = burningManCandidate.getAccumulatedDecayedCompensationAmount(); + accumulatedDecayedCompensationAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedDecayedCompensationAmount); + issuanceShare = burningManCandidate.getIssuanceShare(); + issuanceShareAsString = FormattingUtils.formatToPercentWithSymbol(issuanceShare); + numIssuances = burningManCandidate.getCompensationModels().size(); + } +} diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.fxml b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.fxml new file mode 100644 index 0000000000..84aaae7257 --- /dev/null +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.fxml @@ -0,0 +1,28 @@ + + + + + + + + + + diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java new file mode 100644 index 0000000000..9f417bb458 --- /dev/null +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java @@ -0,0 +1,1045 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.desktop.main.dao.burnbsq.burningmen; + +import bisq.desktop.common.view.ActivatableView; +import bisq.desktop.common.view.FxmlView; +import bisq.desktop.components.AutoTooltipSlideToggleButton; +import bisq.desktop.components.AutoTooltipTableColumn; +import bisq.desktop.components.InputTextField; +import bisq.desktop.components.TitledGroupBg; +import bisq.desktop.main.overlays.popups.Popup; +import bisq.desktop.util.FormBuilder; +import bisq.desktop.util.GUIUtil; +import bisq.desktop.util.Layout; +import bisq.desktop.util.validation.BsqValidator; + +import bisq.core.dao.DaoFacade; +import bisq.core.dao.burningman.BurningManService; +import bisq.core.dao.governance.proofofburn.ProofOfBurnService; +import bisq.core.dao.governance.proposal.TxException; +import bisq.core.dao.state.DaoStateListener; +import bisq.core.dao.state.model.blockchain.Block; +import bisq.core.locale.Res; +import bisq.core.util.FormattingUtils; +import bisq.core.util.ParsingUtils; +import bisq.core.util.coin.BsqFormatter; +import bisq.core.util.coin.CoinFormatter; + +import bisq.common.app.DevEnv; +import bisq.common.util.Tuple2; +import bisq.common.util.Tuple3; + +import org.bitcoinj.core.Coin; +import org.bitcoinj.core.InsufficientMoneyException; +import org.bitcoinj.core.Transaction; + +import javax.inject.Inject; +import javax.inject.Named; + +import javafx.scene.control.Button; +import javafx.scene.control.ComboBox; +import javafx.scene.control.Label; +import javafx.scene.control.ScrollPane; +import javafx.scene.control.TableCell; +import javafx.scene.control.TableColumn; +import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.layout.ColumnConstraints; +import javafx.scene.layout.GridPane; +import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; + +import javafx.geometry.Insets; + +import javafx.beans.property.ReadOnlyObjectWrapper; +import javafx.beans.value.ChangeListener; + +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.collections.transformation.FilteredList; +import javafx.collections.transformation.SortedList; + +import javafx.util.Callback; +import javafx.util.StringConverter; + +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +import static bisq.desktop.util.FormBuilder.*; + +@FxmlView +public class BurningmenView extends ActivatableView implements DaoStateListener { + private final DaoFacade daoFacade; + private final BurningManService burningManService; + private final ProofOfBurnService proofOfBurnService; + private final BsqFormatter bsqFormatter; + private final CoinFormatter btcFormatter; + private final BsqValidator burnAmountValidator; + + private InputTextField amountInputTextField, burningmenFilterField; + private ComboBox contributorComboBox; + private Button burnButton; + private TitledGroupBg burnOutputsTitledGroupBg, compensationTitledGroupBg, selectedContributorTitledGroupBg; + private AutoTooltipSlideToggleButton showOnlyActiveBurningmenToggle; + private TextField currentBlockHeightField, selectedContributorField, burnTargetField; + private VBox selectedContributorBox; + private TableView burningmenTableView; + private TableView burnOutputsTableView; + private TableView compensationTableView; + private TableView reimbursementTableView; + + private final ObservableList burningmenObservableList = FXCollections.observableArrayList(); + private final FilteredList burningmenFilteredList = new FilteredList<>(burningmenObservableList); + private final SortedList burningmenSortedList = new SortedList<>(burningmenFilteredList); + private final ObservableList burnOutputsObservableList = FXCollections.observableArrayList(); + private final SortedList burnOutputsSortedList = new SortedList<>(burnOutputsObservableList); + private final ObservableList compensationObservableList = FXCollections.observableArrayList(); + private final SortedList compensationSortedList = new SortedList<>(compensationObservableList); + private final ObservableList reimbursementObservableList = FXCollections.observableArrayList(); + private final SortedList reimbursementSortedList = new SortedList<>(reimbursementObservableList); + + private final ChangeListener amountFocusOutListener; + private final ChangeListener amountInputTextFieldListener; + private final ChangeListener burningmenSelectionListener; + private final ChangeListener filterListener; + private final ChangeListener contributorsListener; + + private int gridRow = 0; + + /////////////////////////////////////////////////////////////////////////////////////////// + // Constructor, lifecycle + /////////////////////////////////////////////////////////////////////////////////////////// + + @Inject + private BurningmenView(DaoFacade daoFacade, + BurningManService burningManService, + ProofOfBurnService proofOfBurnService, + BsqFormatter bsqFormatter, + @Named(FormattingUtils.BTC_FORMATTER_KEY) CoinFormatter btcFormatter, + BsqValidator bsqValidator) { + this.daoFacade = daoFacade; + this.burningManService = burningManService; + this.proofOfBurnService = proofOfBurnService; + this.bsqFormatter = bsqFormatter; + this.btcFormatter = btcFormatter; + this.burnAmountValidator = bsqValidator; + + amountFocusOutListener = (observable, oldValue, newValue) -> { + if (!newValue) { + updateButtonState(); + } + }; + + amountInputTextFieldListener = (observable, oldValue, newValue) -> { + updateButtonState(); + }; + + burningmenSelectionListener = (observable, oldValue, newValue) -> { + boolean isValueSet = newValue != null; + burnOutputsTableView.setVisible(isValueSet); + burnOutputsTableView.setManaged(isValueSet); + burnOutputsTitledGroupBg.setVisible(isValueSet); + burnOutputsTitledGroupBg.setManaged(isValueSet); + compensationTableView.setVisible(isValueSet); + compensationTableView.setManaged(isValueSet); + compensationTitledGroupBg.setVisible(isValueSet); + compensationTitledGroupBg.setManaged(isValueSet); + selectedContributorTitledGroupBg.setManaged(isValueSet); + selectedContributorTitledGroupBg.setVisible(isValueSet); + selectedContributorBox.setManaged(isValueSet); + selectedContributorBox.setVisible(isValueSet); + if (isValueSet) { + onBurningManSelected(newValue); + } else { + selectedContributorField.clear(); + } + }; + + filterListener = (observable, oldValue, newValue) -> updateBurningmenPredicate(); + + contributorsListener = (observable, oldValue, newValue) -> { + if (newValue != null) { + bsqValidator.setMaxValue(Coin.valueOf(newValue.getAllowedBurnAmount())); + amountInputTextField.resetValidation(); + burnAmountValidator.validate(amountInputTextField.getText()); + amountInputTextField.setPromptText(Res.get("dao.burningmen.amount.prompt.max", + bsqFormatter.formatCoinWithCode(newValue.getAllowedBurnAmount()))); + updateButtonState(); + } + }; + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Constructor, lifecycle + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public void initialize() { + GridPane gridPane = new GridPane(); + gridPane.setHgap(5); + gridPane.setVgap(5); + gridPane.setPadding(new Insets(0, 20, 0, 10)); + ColumnConstraints columnConstraints1 = new ColumnConstraints(); + columnConstraints1.setPercentWidth(50); + ColumnConstraints columnConstraints2 = new ColumnConstraints(); + columnConstraints2.setPercentWidth(50); + gridPane.getColumnConstraints().addAll(columnConstraints1, columnConstraints2); + + root.setContent(gridPane); + root.setHbarPolicy(ScrollPane.ScrollBarPolicy.NEVER); + root.setFitToWidth(true); + + // Burn target + TitledGroupBg targetTitledGroupBg = addTitledGroupBg(gridPane, gridRow, 2, Res.get("dao.burningmen.target.header")); + GridPane.setColumnSpan(targetTitledGroupBg, 2); + burnTargetField = addCompactTopLabelTextField(gridPane, ++gridRow, + Res.get("dao.burningmen.burnTarget"), "", Layout.FLOATING_LABEL_DISTANCE).second; + Tuple3 currentBlockHeightTuple = addCompactTopLabelTextField(gridPane, gridRow, + Res.get("dao.burningmen.currentBlockHeight"), "", Layout.FLOATING_LABEL_DISTANCE); + currentBlockHeightField = currentBlockHeightTuple.second; + GridPane.setColumnIndex(currentBlockHeightTuple.third, 1); + + // Burn inputs + addTitledGroupBg(gridPane, ++gridRow, 4, Res.get("dao.burningmen.burn.header"), Layout.COMPACT_GROUP_DISTANCE); + contributorComboBox = addComboBox(gridPane, gridRow, Res.get("dao.burningmen.contributorsComboBox.prompt"), Layout.COMPACT_FIRST_ROW_AND_GROUP_DISTANCE); + contributorComboBox.setMaxWidth(300); + contributorComboBox.setConverter(new StringConverter<>() { + @Override + public String toString(BurningmenListItem item) { + return item.getName(); + } + + @Override + public BurningmenListItem fromString(String string) { + return null; + } + }); + amountInputTextField = addInputTextField(gridPane, ++gridRow, Res.get("dao.burningmen.amount.prompt")); + burnButton = addButtonAfterGroup(gridPane, ++gridRow, Res.get("dao.proofOfBurn.burn")); + + // Burningmen candidates + Tuple3, HBox> burningmenTuple = addTableViewWithHeaderAndFilterField(gridPane, + ++gridRow, + Res.get("dao.burningmen.candidates.table.header"), + Res.get("dao.burningmen.filter"), + 30); + burningmenFilterField = burningmenTuple.first; + burningmenTableView = burningmenTuple.second; + GridPane.setColumnSpan(burningmenTableView, 2); + burningmenTableView.setItems(burningmenSortedList); + createBurningmenColumns(); + HBox hBox = burningmenTuple.third; + GridPane.setColumnSpan(hBox, 2); + showOnlyActiveBurningmenToggle = new AutoTooltipSlideToggleButton(); + showOnlyActiveBurningmenToggle.setText(Res.get("dao.burningmen.toggle")); + HBox.setMargin(showOnlyActiveBurningmenToggle, new Insets(-21, 0, 0, 0)); + hBox.getChildren().add(2, showOnlyActiveBurningmenToggle); + + // Selected contributor + selectedContributorTitledGroupBg = addTitledGroupBg(gridPane, ++gridRow, 2, Res.get("dao.burningmen.selectedContributor"), Layout.COMPACT_GROUP_DISTANCE); + selectedContributorTitledGroupBg.setManaged(false); + selectedContributorTitledGroupBg.setVisible(false); + Tuple3 tuple = addCompactTopLabelTextField(gridPane, ++gridRow, Res.get("dao.burningmen.selectedContributor.label"), "", Layout.COMPACT_GROUP_DISTANCE + Layout.FLOATING_LABEL_DISTANCE); + selectedContributorField = tuple.second; + selectedContributorBox = tuple.third; + GridPane.setColumnSpan(selectedContributorBox, 2); + selectedContributorBox.setManaged(false); + selectedContributorBox.setVisible(false); + + // BurnOutputs + Tuple2, TitledGroupBg> burnOutputTuple = FormBuilder.addTableViewWithHeader(gridPane, ++gridRow, + Res.get("dao.burningmen.burnOutput.table.header"), 30); + burnOutputsTableView = burnOutputTuple.first; + GridPane.setMargin(burnOutputsTableView, new Insets(60, 0, 5, -10)); + burnOutputsTableView.setPrefHeight(50); + createBurnOutputsColumns(); + burnOutputsTableView.setItems(burnOutputsSortedList); + burnOutputsTableView.setVisible(false); + burnOutputsTableView.setManaged(false); + burnOutputsTitledGroupBg = burnOutputTuple.second; + burnOutputsTitledGroupBg.setVisible(false); + burnOutputsTitledGroupBg.setManaged(false); + + // Compensations + Tuple2, TitledGroupBg> compensationTuple = FormBuilder.addTableViewWithHeader(gridPane, gridRow, + Res.get("dao.burningmen.issuance.table.header"), 30); + compensationTableView = compensationTuple.first; + GridPane.setMargin(compensationTableView, new Insets(60, -10, 5, 0)); + GridPane.setColumnIndex(compensationTableView, 1); + compensationTableView.setPrefHeight(50); + createCompensationColumns(); + compensationTableView.setItems(compensationSortedList); + compensationTableView.setVisible(false); + compensationTableView.setManaged(false); + compensationTitledGroupBg = compensationTuple.second; + GridPane.setColumnIndex(compensationTitledGroupBg, 1); + compensationTitledGroupBg.setVisible(false); + compensationTitledGroupBg.setManaged(false); + + // Reimbursements + reimbursementTableView = FormBuilder.addTableViewWithHeader(gridPane, ++gridRow, + Res.get("dao.burningmen.reimbursement.table.header"), 30).first; + GridPane.setColumnSpan(reimbursementTableView, 2); + createReimbursementColumns(); + reimbursementTableView.setItems(reimbursementSortedList); + } + + @Override + protected void activate() { + daoFacade.addBsqStateListener(this); + + amountInputTextField.textProperty().addListener(amountInputTextFieldListener); + amountInputTextField.focusedProperty().addListener(amountFocusOutListener); + + burningmenFilterField.textProperty().addListener(filterListener); + burningmenTableView.getSelectionModel().selectedItemProperty().addListener(burningmenSelectionListener); + + contributorComboBox.getSelectionModel().selectedItemProperty().addListener(contributorsListener); + + burningmenSortedList.comparatorProperty().bind(burningmenTableView.comparatorProperty()); + burnOutputsSortedList.comparatorProperty().bind(burnOutputsTableView.comparatorProperty()); + compensationSortedList.comparatorProperty().bind(compensationTableView.comparatorProperty()); + reimbursementSortedList.comparatorProperty().bind(reimbursementTableView.comparatorProperty()); + + burnButton.setOnAction((event) -> { + BurningmenListItem selectedItem = contributorComboBox.getSelectionModel().getSelectedItem(); + if (selectedItem != null) { + Coin amount = getAmountFee(); + String name = selectedItem.getName(); + try { + Transaction transaction = proofOfBurnService.burn(name, amount.value); + Coin miningFee = transaction.getFee(); + int txVsize = transaction.getVsize(); + + if (!DevEnv.isDevMode()) { + GUIUtil.showBsqFeeInfoPopup(amount, miningFee, txVsize, bsqFormatter, btcFormatter, + Res.get("dao.proofOfBurn.header"), () -> doPublishFeeTx(transaction, name)); + } else { + doPublishFeeTx(transaction, name); + } + } catch (InsufficientMoneyException | TxException e) { + e.printStackTrace(); + new Popup().error(e.toString()).show(); + } + } + }); + + showOnlyActiveBurningmenToggle.setOnAction(e -> updateBurningmenPredicate()); + + amountInputTextField.setValidator(burnAmountValidator); + + if (daoFacade.isParseBlockChainComplete()) { + updateData(); + } + + updateButtonState(); + updateBurningmenPredicate(); + } + + @Override + protected void deactivate() { + daoFacade.removeBsqStateListener(this); + + amountInputTextField.textProperty().removeListener(amountInputTextFieldListener); + amountInputTextField.focusedProperty().removeListener(amountFocusOutListener); + + burningmenFilterField.textProperty().removeListener(filterListener); + burningmenTableView.getSelectionModel().selectedItemProperty().removeListener(burningmenSelectionListener); + + contributorComboBox.getSelectionModel().selectedItemProperty().removeListener(contributorsListener); + + burningmenSortedList.comparatorProperty().unbind(); + burnOutputsSortedList.comparatorProperty().unbind(); + compensationSortedList.comparatorProperty().unbind(); + reimbursementSortedList.comparatorProperty().unbind(); + + burnButton.setOnAction(null); + showOnlyActiveBurningmenToggle.setOnAction(null); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // DaoStateListener + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public void onParseBlockCompleteAfterBatchProcessing(Block block) { + updateData(); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Private + /////////////////////////////////////////////////////////////////////////////////////////// + + private void updateData() { + burningmenObservableList.setAll(burningManService.getCurrentBurningManCandidatesByName().entrySet().stream() + .map(entry -> new BurningmenListItem(entry.getKey(), entry.getValue(), bsqFormatter)) + .collect(Collectors.toList())); + reimbursementObservableList.setAll(burningManService.getCurrentReimbursements().stream() + .map(reimbursementModel -> new ReimbursementListItem(reimbursementModel, bsqFormatter)) + .collect(Collectors.toList())); + + currentBlockHeightField.setText(String.valueOf(daoFacade.getChainHeight())); + burnTargetField.setText(bsqFormatter.formatCoinWithCode(burningManService.getCurrentBurnTarget())); + + if (daoFacade.isParseBlockChainComplete()) { + Set myContributorNames = burningManService.getMyCompensationRequestNames(); + burningManService.findMyGenesisOutputNames().ifPresent(myContributorNames::addAll); + + Map burningmenListItemByName = burningmenObservableList.stream() + .collect(Collectors.toMap(BurningmenListItem::getName, e -> e)); + List myBurningmenListItems = myContributorNames.stream() + .filter(burningmenListItemByName::containsKey) + .map(burningmenListItemByName::get) + .sorted(Comparator.comparing(BurningmenListItem::getName)) + .collect(Collectors.toList()); + contributorComboBox.setItems(FXCollections.observableArrayList(myBurningmenListItems)); + } + } + + private void updateBurningmenPredicate() { + burningmenFilteredList.setPredicate(burningmenListItem -> { + boolean showOnlyActiveBurningmen = showOnlyActiveBurningmenToggle.isSelected(); + String filterText = burningmenFilterField.getText(); + boolean activeBurnerOrShowAll = !showOnlyActiveBurningmen || burningmenListItem.getEffectiveBurnOutputShare() > 0; + if (filterText == null || filterText.trim().isEmpty()) { + return activeBurnerOrShowAll; + } else { + return activeBurnerOrShowAll && burningmenListItem.getName().toLowerCase().contains(filterText.toLowerCase()); + } + }); + } + + private void onBurningManSelected(BurningmenListItem burningmenListItem) { + selectedContributorField.setText(burningmenListItem.getName()); + burnOutputsObservableList.setAll(burningmenListItem.getBurningManCandidate().getBurnOutputModels().stream() + .map(burnOutputModel -> new BurnOutputListItem(burnOutputModel, bsqFormatter)) + .collect(Collectors.toList())); + GUIUtil.setFitToRowsForTableView(burnOutputsTableView, 36, 28, 4, 6); + compensationObservableList.setAll(burningmenListItem.getBurningManCandidate().getCompensationModels().stream() + .map(compensationModel -> new CompensationListItem(compensationModel, bsqFormatter)) + .collect(Collectors.toList())); + GUIUtil.setFitToRowsForTableView(compensationTableView, 36, 28, 4, 6); + } + + private void updateButtonState() { + boolean isValid = burnAmountValidator.validate(amountInputTextField.getText()).isValid && + contributorComboBox.getSelectionModel().getSelectedItem() != null; + burnButton.setDisable(!isValid); + } + + private Coin getAmountFee() { + return ParsingUtils.parseToCoin(amountInputTextField.getText(), bsqFormatter); + } + + private void doPublishFeeTx(Transaction transaction, String preImageAsString) { + proofOfBurnService.publishTransaction(transaction, preImageAsString, + () -> { + if (!DevEnv.isDevMode()) + new Popup().confirmation(Res.get("dao.tx.published.success")).show(); + }, + errorMessage -> new Popup().warning(errorMessage).show()); + + amountInputTextField.clear(); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Table columns + /////////////////////////////////////////////////////////////////////////////////////////// + + private void createBurningmenColumns() { + TableColumn column; + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.name")); + column.setMinWidth(80); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.getStyleClass().add("first-column"); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BurningmenListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setMinHeight(36); + setText(item.getName()); + } else + setText(""); + } + }; + } + }); + burningmenTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(e -> e.getName().toLowerCase())); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.allowedBurnAmount")); + column.setMinWidth(80); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BurningmenListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(item.getAllowedBurnAmountAsBsq()); + } else + setText(""); + } + }; + } + }); + burningmenTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurningmenListItem::getAllowedBurnAmount)); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.burnOutputShare")); + column.setMinWidth(100); + column.setMaxWidth(column.getMinWidth()); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BurningmenListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(item.getEffectiveBurnOutputShareAsString()); + } else + setText(""); + } + }; + } + }); + burningmenTableView.getColumns().add(column); + column.setSortType(TableColumn.SortType.DESCENDING); + column.setComparator(Comparator.comparing(BurningmenListItem::getEffectiveBurnOutputShare)); + burningmenTableView.getSortOrder().add(column); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.decayedBurnAmount")); + column.setMinWidth(80); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BurningmenListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(item.getAccumulatedDecayedBurnAmountAsBsq()); + } else + setText(""); + } + }; + } + }); + burningmenTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurningmenListItem::getAccumulatedDecayedBurnAmount)); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.burnAmount")); + column.setMinWidth(80); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BurningmenListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(item.getAccumulatedBurnAmountAsBsq()); + } else + setText(""); + } + }; + } + }); + burningmenTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurningmenListItem::getAccumulatedBurnAmount)); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.numBurnOutputs")); + column.setMinWidth(100); + column.setMaxWidth(column.getMinWidth()); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BurningmenListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(String.valueOf(item.getNumBurnOutputs())); + } else + setText(""); + } + }; + } + }); + burningmenTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurningmenListItem::getNumBurnOutputs)); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.issuanceShare")); + column.setMinWidth(100); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BurningmenListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(item.getIssuanceShareAsString()); + } else + setText(""); + } + }; + } + }); + burningmenTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurningmenListItem::getIssuanceShare)); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.decayedIssuanceAmount")); + column.setMinWidth(80); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BurningmenListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(item.getAccumulatedDecayedCompensationAmountAsBsq()); + } else + setText(""); + } + }; + } + }); + burningmenTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurningmenListItem::getAccumulatedDecayedCompensationAmount)); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.issuanceAmount")); + column.setMinWidth(80); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BurningmenListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(item.getAccumulatedCompensationAmountAsBsq()); + } else + setText(""); + } + }; + } + }); + burningmenTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurningmenListItem::getAccumulatedCompensationAmount)); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.numIssuances")); + column.setMinWidth(100); + column.setMaxWidth(column.getMinWidth()); + column.getStyleClass().add("last-column"); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BurningmenListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(String.valueOf(item.getNumIssuances())); + } else + setText(""); + } + }; + } + }); + burningmenTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurningmenListItem::getNumIssuances)); + } + + private void createBurnOutputsColumns() { + TableColumn column; + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.date")); + column.setMinWidth(80); + column.getStyleClass().add("first-column"); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BurnOutputListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setMinHeight(36); + setText(item.getDateAsString()); + } else + setText(""); + } + }; + } + }); + burnOutputsTableView.getColumns().add(column); + column.setSortType(TableColumn.SortType.DESCENDING); + column.setComparator(Comparator.comparing(BurnOutputListItem::getDate)); + burnOutputsTableView.getSortOrder().add(column); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.cycle")); + column.setMinWidth(50); + column.setMaxWidth(column.getMinWidth()); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BurnOutputListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(String.valueOf(item.getCycleIndex() + 1)); + } else + setText(""); + } + }; + } + }); + burnOutputsTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurnOutputListItem::getCycleIndex)); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.height")); + column.setMinWidth(100); + column.setMaxWidth(column.getMinWidth()); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BurnOutputListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(String.valueOf(item.getHeight())); + } else + setText(""); + } + }; + } + }); + burnOutputsTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurnOutputListItem::getHeight)); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.decayedBurnAmount")); + column.setMinWidth(80); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BurnOutputListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(item.getDecayedAmountAsString()); + } else + setText(""); + } + }; + } + }); + burnOutputsTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurnOutputListItem::getDecayedAmount)); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.burnAmount")); + column.setMinWidth(80); + column.getStyleClass().add("last-column"); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BurnOutputListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(item.getAmountAsString()); + } else + setText(""); + } + }; + } + }); + burnOutputsTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurnOutputListItem::getAmount)); + } + + private void createCompensationColumns() { + TableColumn column; + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.date")); + column.setMinWidth(80); + column.getStyleClass().add("first-column"); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final CompensationListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setMinHeight(36); + setText(item.getDateAsString()); + } else + setText(""); + } + }; + } + }); + compensationTableView.getColumns().add(column); + column.setSortType(TableColumn.SortType.DESCENDING); + column.setComparator(Comparator.comparing(CompensationListItem::getDate)); + compensationTableView.getSortOrder().add(column); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.cycle")); + column.setMinWidth(50); + column.setMaxWidth(column.getMinWidth()); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final CompensationListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(String.valueOf(item.getCycleIndex() + 1)); + } else + setText(""); + } + }; + } + }); + compensationTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(CompensationListItem::getCycleIndex)); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.height")); + column.setMinWidth(100); + column.setMaxWidth(column.getMinWidth()); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final CompensationListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(String.valueOf(item.getHeight())); + } else + setText(""); + } + }; + } + }); + compensationTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(CompensationListItem::getHeight)); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.decayedIssuanceAmount")); + column.setMinWidth(80); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final CompensationListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(item.getDecayedAmountAsString()); + } else + setText(""); + } + }; + } + }); + compensationTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(CompensationListItem::getDecayedAmount)); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.issuanceAmount")); + column.setMinWidth(80); + column.getStyleClass().add("last-column"); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final CompensationListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(item.getAmountAsString()); + } else + setText(""); + } + }; + } + }); + compensationTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(CompensationListItem::getAmount)); + } + + + private void createReimbursementColumns() { + TableColumn column; + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.date")); + column.setMinWidth(80); + column.getStyleClass().add("first-column"); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final ReimbursementListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setMinHeight(36); + setText(item.getDateAsString()); + } else + setText(""); + } + }; + } + }); + reimbursementTableView.getColumns().add(column); + column.setSortType(TableColumn.SortType.DESCENDING); + column.setComparator(Comparator.comparing(ReimbursementListItem::getDate)); + reimbursementTableView.getSortOrder().add(column); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.height")); + column.setMinWidth(100); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final ReimbursementListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(String.valueOf(item.getHeight())); + } else + setText(""); + } + }; + } + }); + reimbursementTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(ReimbursementListItem::getHeight)); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.cycle")); + column.setMinWidth(50); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final ReimbursementListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(String.valueOf(item.getCycleIndex() + 1)); + } else + setText(""); + } + }; + } + }); + reimbursementTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(ReimbursementListItem::getCycleIndex)); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.reimbursedAmount")); + column.setMinWidth(80); + column.getStyleClass().add("last-column"); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final ReimbursementListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(item.getAmountAsString()); + } else + setText(""); + } + }; + } + }); + reimbursementTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(ReimbursementListItem::getAmount)); + } +} diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java new file mode 100644 index 0000000000..046a3c78b3 --- /dev/null +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java @@ -0,0 +1,52 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.desktop.main.dao.burnbsq.burningmen; + +import bisq.desktop.util.DisplayUtils; + +import bisq.core.dao.burningman.CompensationModel; +import bisq.core.util.coin.BsqFormatter; + +import java.util.Date; + +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@Getter +@EqualsAndHashCode +class CompensationListItem { + private final CompensationModel compensationModel; + private final String address, txId, amountAsString, decayedAmountAsString, dateAsString; + private final long amount, decayedAmount, date; + private final int height, cycleIndex; + + CompensationListItem(CompensationModel model, BsqFormatter bsqFormatter) { + this.compensationModel = model; + + height = model.getHeight(); + cycleIndex = model.getCycleIndex(); + date = model.getDate(); + dateAsString = DisplayUtils.formatDateTime(new Date(date)); + txId = model.getTxId(); + address = model.getAddress(); + amount = model.getAmount(); + amountAsString = bsqFormatter.formatCoinWithCode(amount); + decayedAmount = model.getDecayedAmount(); + decayedAmountAsString = bsqFormatter.formatCoinWithCode(decayedAmount); + } +} diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java new file mode 100644 index 0000000000..20cdee820a --- /dev/null +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java @@ -0,0 +1,48 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.desktop.main.dao.burnbsq.burningmen; + +import bisq.desktop.util.DisplayUtils; + +import bisq.core.dao.burningman.ReimbursementModel; +import bisq.core.util.coin.BsqFormatter; + +import java.util.Date; + +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@Getter +@EqualsAndHashCode +class ReimbursementListItem { + private final ReimbursementModel reimbursementModel; + private final String amountAsString, dateAsString; + private final long amount, date; + private final int height, cycleIndex; + + ReimbursementListItem(ReimbursementModel model, BsqFormatter bsqFormatter) { + this.reimbursementModel = model; + + height = model.getHeight(); + cycleIndex = model.getCycleIndex(); + date = model.getDate(); + dateAsString = DisplayUtils.formatDateTime(new Date(date)); + amount = model.getAmount(); + amountAsString = bsqFormatter.formatCoinWithCode(amount); + } +} From e2ce053a01087f9aff82c1f793254ffdba7181b2 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 3 Nov 2022 18:54:31 -0500 Subject: [PATCH 07/86] Add burningManSelectionHeight fields to OfferAvailabilityRequest, InputsForDepositTxRequest and ProcessModel. Use BurningManService.getBtcFeeReceiverAddress at createFeeTx tasks. Verify takers burningManSelectionHeight if BurningManService.isActivated at MakerProcessesInputsForDepositTxRequest and OpenOfferManager. Stores burningManSelectionHeight in ProcessModel. Add BurningManService fields to OfferAvailabilityModel, PlaceOfferModel, OpenOfferManager and Provider Signed-off-by: HenrikJannsen --- .../bisq/core/offer/OpenOfferManager.java | 21 +++++++++++++++++++ .../availability/OfferAvailabilityModel.java | 7 +++++++ .../messages/OfferAvailabilityRequest.java | 16 +++++++++++--- .../tasks/SendOfferAvailabilityRequest.java | 6 +++++- .../placeoffer/bisq_v1/PlaceOfferModel.java | 4 ++++ .../bisq_v1/tasks/CreateMakerFeeTx.java | 4 +--- .../java/bisq/core/trade/TradeManager.java | 1 + .../bisq/core/trade/protocol/Provider.java | 6 +++++- .../messages/InputsForDepositTxRequest.java | 14 ++++++++++--- .../protocol/bisq_v1/model/ProcessModel.java | 14 ++++++++++++- ...kerProcessesInputsForDepositTxRequest.java | 11 ++++++++++ .../bisq_v1/tasks/taker/CreateTakerFeeTx.java | 3 +-- .../TakerSendInputsForDepositTxRequest.java | 6 +++++- .../bisq/core/offer/OpenOfferManagerTest.java | 3 +++ proto/src/main/proto/pb.proto | 3 +++ 15 files changed, 104 insertions(+), 15 deletions(-) diff --git a/core/src/main/java/bisq/core/offer/OpenOfferManager.java b/core/src/main/java/bisq/core/offer/OpenOfferManager.java index e2b270f690..f3c0c270b6 100644 --- a/core/src/main/java/bisq/core/offer/OpenOfferManager.java +++ b/core/src/main/java/bisq/core/offer/OpenOfferManager.java @@ -22,6 +22,7 @@ import bisq.core.btc.wallet.BsqWalletService; import bisq.core.btc.wallet.BtcWalletService; import bisq.core.btc.wallet.TradeWalletService; import bisq.core.dao.DaoFacade; +import bisq.core.dao.burningman.BurningManService; import bisq.core.exceptions.TradePriceOutOfToleranceException; import bisq.core.filter.FilterManager; import bisq.core.locale.Res; @@ -122,6 +123,7 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe private final RefundAgentManager refundAgentManager; private final DaoFacade daoFacade; private final FilterManager filterManager; + private final BurningManService burningManService; private final Broadcaster broadcaster; private final PersistenceManager> persistenceManager; private final Map offersToBeEdited = new HashMap<>(); @@ -155,6 +157,7 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe RefundAgentManager refundAgentManager, DaoFacade daoFacade, FilterManager filterManager, + BurningManService burningManService, Broadcaster broadcaster, PersistenceManager> persistenceManager) { this.coreContext = coreContext; @@ -175,6 +178,7 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe this.refundAgentManager = refundAgentManager; this.daoFacade = daoFacade; this.filterManager = filterManager; + this.burningManService = burningManService; this.broadcaster = broadcaster; this.persistenceManager = persistenceManager; @@ -389,6 +393,7 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe arbitratorManager, tradeStatisticsManager, daoFacade, + burningManService, user, filterManager); PlaceOfferProtocol placeOfferProtocol = new PlaceOfferProtocol( @@ -663,6 +668,22 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe return; } + if (BurningManService.isActivated()) { + try { + int takersBurningManSelectionHeight = request.getBurningManSelectionHeight(); + checkArgument(takersBurningManSelectionHeight > 0, "takersBurningManSelectionHeight must not be 0"); + + int makersBurningManSelectionHeight = burningManService.getBurningManSelectionHeight(); + checkArgument(takersBurningManSelectionHeight == makersBurningManSelectionHeight, + "takersBurningManSelectionHeight does no match makersBurningManSelectionHeight"); + } catch (Throwable t) { + errorMessage = "Message validation failed. Error=" + t + ", Message=" + request; + log.warn(errorMessage); + sendAckMessage(request, peer, false, errorMessage); + return; + } + } + try { Optional openOfferOptional = getOpenOfferById(request.offerId); AvailabilityResult availabilityResult; diff --git a/core/src/main/java/bisq/core/offer/availability/OfferAvailabilityModel.java b/core/src/main/java/bisq/core/offer/availability/OfferAvailabilityModel.java index 6b75fda67d..0547b8a188 100644 --- a/core/src/main/java/bisq/core/offer/availability/OfferAvailabilityModel.java +++ b/core/src/main/java/bisq/core/offer/availability/OfferAvailabilityModel.java @@ -17,6 +17,7 @@ package bisq.core.offer.availability; +import bisq.core.dao.burningman.BurningManService; import bisq.core.offer.Offer; import bisq.core.offer.availability.messages.OfferAvailabilityResponse; import bisq.core.support.dispute.mediation.mediator.MediatorManager; @@ -70,12 +71,17 @@ public class OfferAvailabilityModel implements Model { @Getter private final boolean isTakerApiUser; + // Added in v 1.9.7 + @Getter + private final BurningManService burningManService; + public OfferAvailabilityModel(Offer offer, PubKeyRing pubKeyRing, P2PService p2PService, User user, MediatorManager mediatorManager, TradeStatisticsManager tradeStatisticsManager, + BurningManService burningManService, boolean isTakerApiUser) { this.offer = offer; this.pubKeyRing = pubKeyRing; @@ -83,6 +89,7 @@ public class OfferAvailabilityModel implements Model { this.user = user; this.mediatorManager = mediatorManager; this.tradeStatisticsManager = tradeStatisticsManager; + this.burningManService = burningManService; this.isTakerApiUser = isTakerApiUser; } diff --git a/core/src/main/java/bisq/core/offer/availability/messages/OfferAvailabilityRequest.java b/core/src/main/java/bisq/core/offer/availability/messages/OfferAvailabilityRequest.java index 2b2d412b45..baea9d0fcd 100644 --- a/core/src/main/java/bisq/core/offer/availability/messages/OfferAvailabilityRequest.java +++ b/core/src/main/java/bisq/core/offer/availability/messages/OfferAvailabilityRequest.java @@ -44,17 +44,23 @@ public final class OfferAvailabilityRequest extends OfferMessage implements Supp private final Capabilities supportedCapabilities; private final boolean isTakerApiUser; + // Added in v 1.9.7 + private final int burningManSelectionHeight; + public OfferAvailabilityRequest(String offerId, PubKeyRing pubKeyRing, long takersTradePrice, - boolean isTakerApiUser) { + boolean isTakerApiUser, + int burningManSelectionHeight) { this(offerId, pubKeyRing, takersTradePrice, isTakerApiUser, + burningManSelectionHeight, Capabilities.app, Version.getP2PMessageVersion(), - UUID.randomUUID().toString()); + UUID.randomUUID().toString() + ); } @@ -66,6 +72,7 @@ public final class OfferAvailabilityRequest extends OfferMessage implements Supp PubKeyRing pubKeyRing, long takersTradePrice, boolean isTakerApiUser, + int burningManSelectionHeight, @Nullable Capabilities supportedCapabilities, int messageVersion, @Nullable String uid) { @@ -73,6 +80,7 @@ public final class OfferAvailabilityRequest extends OfferMessage implements Supp this.pubKeyRing = pubKeyRing; this.takersTradePrice = takersTradePrice; this.isTakerApiUser = isTakerApiUser; + this.burningManSelectionHeight = burningManSelectionHeight; this.supportedCapabilities = supportedCapabilities; } @@ -82,7 +90,8 @@ public final class OfferAvailabilityRequest extends OfferMessage implements Supp .setOfferId(offerId) .setPubKeyRing(pubKeyRing.toProtoMessage()) .setTakersTradePrice(takersTradePrice) - .setIsTakerApiUser(isTakerApiUser); + .setIsTakerApiUser(isTakerApiUser) + .setBurningManSelectionHeight(burningManSelectionHeight); Optional.ofNullable(supportedCapabilities).ifPresent(e -> builder.addAllSupportedCapabilities(Capabilities.toIntList(supportedCapabilities))); Optional.ofNullable(uid).ifPresent(e -> builder.setUid(uid)); @@ -97,6 +106,7 @@ public final class OfferAvailabilityRequest extends OfferMessage implements Supp PubKeyRing.fromProto(proto.getPubKeyRing()), proto.getTakersTradePrice(), proto.getIsTakerApiUser(), + proto.getBurningManSelectionHeight(), Capabilities.fromIntList(proto.getSupportedCapabilitiesList()), messageVersion, proto.getUid().isEmpty() ? null : proto.getUid()); diff --git a/core/src/main/java/bisq/core/offer/availability/tasks/SendOfferAvailabilityRequest.java b/core/src/main/java/bisq/core/offer/availability/tasks/SendOfferAvailabilityRequest.java index 6c0c11f40e..b2d894e899 100644 --- a/core/src/main/java/bisq/core/offer/availability/tasks/SendOfferAvailabilityRequest.java +++ b/core/src/main/java/bisq/core/offer/availability/tasks/SendOfferAvailabilityRequest.java @@ -39,8 +39,12 @@ public class SendOfferAvailabilityRequest extends Task { try { runInterceptHook(); + int burningManSelectionHeight = model.getBurningManService().getBurningManSelectionHeight(); OfferAvailabilityRequest message = new OfferAvailabilityRequest(model.getOffer().getId(), - model.getPubKeyRing(), model.getTakersTradePrice(), model.isTakerApiUser()); + model.getPubKeyRing(), + model.getTakersTradePrice(), + model.isTakerApiUser(), + burningManSelectionHeight); log.info("Send {} with offerId {} and uid {} to peer {}", message.getClass().getSimpleName(), message.getOfferId(), message.getUid(), model.getPeerNodeAddress()); diff --git a/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/PlaceOfferModel.java b/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/PlaceOfferModel.java index e90e4dcc00..a9bfad00ba 100644 --- a/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/PlaceOfferModel.java +++ b/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/PlaceOfferModel.java @@ -21,6 +21,7 @@ import bisq.core.btc.wallet.BsqWalletService; import bisq.core.btc.wallet.BtcWalletService; import bisq.core.btc.wallet.TradeWalletService; import bisq.core.dao.DaoFacade; +import bisq.core.dao.burningman.BurningManService; import bisq.core.filter.FilterManager; import bisq.core.offer.Offer; import bisq.core.offer.OfferBookService; @@ -51,6 +52,7 @@ public class PlaceOfferModel implements Model { private final ArbitratorManager arbitratorManager; private final TradeStatisticsManager tradeStatisticsManager; private final DaoFacade daoFacade; + private final BurningManService burningManService; private final User user; @Getter private final FilterManager filterManager; @@ -71,6 +73,7 @@ public class PlaceOfferModel implements Model { ArbitratorManager arbitratorManager, TradeStatisticsManager tradeStatisticsManager, DaoFacade daoFacade, + BurningManService burningManService, User user, FilterManager filterManager) { this.offer = offer; @@ -83,6 +86,7 @@ public class PlaceOfferModel implements Model { this.arbitratorManager = arbitratorManager; this.tradeStatisticsManager = tradeStatisticsManager; this.daoFacade = daoFacade; + this.burningManService = burningManService; this.user = user; this.filterManager = filterManager; } diff --git a/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/tasks/CreateMakerFeeTx.java b/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/tasks/CreateMakerFeeTx.java index 471593a3d2..8d730000fa 100644 --- a/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/tasks/CreateMakerFeeTx.java +++ b/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/tasks/CreateMakerFeeTx.java @@ -28,7 +28,6 @@ import bisq.core.dao.exceptions.DaoDisabledException; import bisq.core.dao.state.model.blockchain.TxType; import bisq.core.offer.Offer; import bisq.core.offer.placeoffer.bisq_v1.PlaceOfferModel; -import bisq.core.util.FeeReceiverSelector; import bisq.common.UserThread; import bisq.common.taskrunner.Task; @@ -66,9 +65,8 @@ public class CreateMakerFeeTx extends Task { TradeWalletService tradeWalletService = model.getTradeWalletService(); - String feeReceiver = FeeReceiverSelector.getAddress(model.getFilterManager()); - if (offer.isCurrencyForMakerFeeBtc()) { + String feeReceiver = model.getBurningManService().getBtcFeeReceiverAddress(); tradeWalletService.createBtcTradingFeeTx( fundingAddress, reservedForTradeAddress, diff --git a/core/src/main/java/bisq/core/trade/TradeManager.java b/core/src/main/java/bisq/core/trade/TradeManager.java index 21d1615110..ce88e0ac8f 100644 --- a/core/src/main/java/bisq/core/trade/TradeManager.java +++ b/core/src/main/java/bisq/core/trade/TradeManager.java @@ -644,6 +644,7 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi user, mediatorManager, tradeStatisticsManager, + provider.getBurningManService(), isTakerApiUser); } diff --git a/core/src/main/java/bisq/core/trade/protocol/Provider.java b/core/src/main/java/bisq/core/trade/protocol/Provider.java index 273285efe1..13536373eb 100644 --- a/core/src/main/java/bisq/core/trade/protocol/Provider.java +++ b/core/src/main/java/bisq/core/trade/protocol/Provider.java @@ -23,6 +23,7 @@ import bisq.core.btc.wallet.BtcWalletService; import bisq.core.btc.wallet.TradeWalletService; import bisq.core.btc.wallet.WalletsManager; import bisq.core.dao.DaoFacade; +import bisq.core.dao.burningman.BurningManService; import bisq.core.filter.FilterManager; import bisq.core.offer.OpenOfferManager; import bisq.core.provider.fee.FeeService; @@ -60,6 +61,7 @@ public class Provider { private final RefundAgentManager refundAgentManager; private final KeyRing keyRing; private final FeeService feeService; + private final BurningManService burningManService; @Inject public Provider(OpenOfferManager openOfferManager, @@ -78,7 +80,8 @@ public class Provider { MediatorManager mediatorManager, RefundAgentManager refundAgentManager, KeyRing keyRing, - FeeService feeService) { + FeeService feeService, + BurningManService burningManService) { this.openOfferManager = openOfferManager; this.p2PService = p2PService; @@ -97,5 +100,6 @@ public class Provider { this.refundAgentManager = refundAgentManager; this.keyRing = keyRing; this.feeService = feeService; + this.burningManService = burningManService; } } diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/messages/InputsForDepositTxRequest.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/messages/InputsForDepositTxRequest.java index d6cf92ab3d..7725a66b81 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/messages/InputsForDepositTxRequest.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/messages/InputsForDepositTxRequest.java @@ -80,6 +80,9 @@ public final class InputsForDepositTxRequest extends TradeMessage implements Dir @Nullable private final String takersPaymentMethodId; + // Added in v 1.9.7 + private final int burningManSelectionHeight; + public InputsForDepositTxRequest(String tradeId, NodeAddress senderNodeAddress, long tradeAmount, @@ -107,7 +110,8 @@ public final class InputsForDepositTxRequest extends TradeMessage implements Dir byte[] accountAgeWitnessSignatureOfOfferId, long currentDate, @Nullable byte[] hashOfTakersPaymentAccountPayload, - @Nullable String takersPaymentMethodId) { + @Nullable String takersPaymentMethodId, + int burningManSelectionHeight) { super(messageVersion, tradeId, uid); this.senderNodeAddress = senderNodeAddress; this.tradeAmount = tradeAmount; @@ -134,6 +138,7 @@ public final class InputsForDepositTxRequest extends TradeMessage implements Dir this.currentDate = currentDate; this.hashOfTakersPaymentAccountPayload = hashOfTakersPaymentAccountPayload; this.takersPaymentMethodId = takersPaymentMethodId; + this.burningManSelectionHeight = burningManSelectionHeight; } @@ -169,7 +174,8 @@ public final class InputsForDepositTxRequest extends TradeMessage implements Dir .setRefundAgentNodeAddress(refundAgentNodeAddress.toProtoMessage()) .setUid(uid) .setAccountAgeWitnessSignatureOfOfferId(ByteString.copyFrom(accountAgeWitnessSignatureOfOfferId)) - .setCurrentDate(currentDate); + .setCurrentDate(currentDate) + .setBurningManSelectionHeight(burningManSelectionHeight); Optional.ofNullable(changeOutputAddress).ifPresent(builder::setChangeOutputAddress); Optional.ofNullable(arbitratorNodeAddress).ifPresent(e -> builder.setArbitratorNodeAddress(arbitratorNodeAddress.toProtoMessage())); @@ -223,7 +229,8 @@ public final class InputsForDepositTxRequest extends TradeMessage implements Dir ProtoUtil.byteArrayOrNullFromProto(proto.getAccountAgeWitnessSignatureOfOfferId()), proto.getCurrentDate(), hashOfTakersPaymentAccountPayload, - ProtoUtil.stringOrNullFromProto(proto.getTakersPayoutMethodId())); + ProtoUtil.stringOrNullFromProto(proto.getTakersPayoutMethodId()), + proto.getBurningManSelectionHeight()); } @Override @@ -253,6 +260,7 @@ public final class InputsForDepositTxRequest extends TradeMessage implements Dir ",\n currentDate=" + currentDate + ",\n hashOfTakersPaymentAccountPayload=" + Utilities.bytesAsHexString(hashOfTakersPaymentAccountPayload) + ",\n takersPaymentMethodId=" + takersPaymentMethodId + + ",\n burningManSelectionHeight=" + burningManSelectionHeight + "\n} " + super.toString(); } } diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/model/ProcessModel.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/model/ProcessModel.java index a7ad26a85a..6baa603d50 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/model/ProcessModel.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/model/ProcessModel.java @@ -23,6 +23,7 @@ import bisq.core.btc.wallet.BsqWalletService; import bisq.core.btc.wallet.BtcWalletService; import bisq.core.btc.wallet.TradeWalletService; import bisq.core.dao.DaoFacade; +import bisq.core.dao.burningman.BurningManService; import bisq.core.filter.FilterManager; import bisq.core.network.MessageState; import bisq.core.offer.Offer; @@ -176,6 +177,11 @@ public class ProcessModel implements ProtocolModel { @Setter private ObjectProperty paymentStartedMessageStateProperty = new SimpleObjectProperty<>(MessageState.UNDEFINED); + // Added in v 1.9.7 + @Setter + @Getter + private int burningManSelectionHeight; + public ProcessModel(String offerId, String accountId, PubKeyRing pubKeyRing) { this(offerId, accountId, pubKeyRing, new TradingPeer()); } @@ -217,7 +223,8 @@ public class ProcessModel implements ProtocolModel { .setFundsNeededForTradeAsLong(fundsNeededForTradeAsLong) .setPaymentStartedMessageState(paymentStartedMessageStateProperty.get().name()) .setBuyerPayoutAmountFromMediation(buyerPayoutAmountFromMediation) - .setSellerPayoutAmountFromMediation(sellerPayoutAmountFromMediation); + .setSellerPayoutAmountFromMediation(sellerPayoutAmountFromMediation) + .setBurningManSelectionHeight(burningManSelectionHeight); Optional.ofNullable(takeOfferFeeTxId).ifPresent(builder::setTakeOfferFeeTxId); Optional.ofNullable(payoutTxSignature).ifPresent(e -> builder.setPayoutTxSignature(ByteString.copyFrom(payoutTxSignature))); @@ -259,6 +266,7 @@ public class ProcessModel implements ProtocolModel { String paymentStartedMessageStateString = ProtoUtil.stringOrNullFromProto(proto.getPaymentStartedMessageState()); MessageState paymentStartedMessageState = ProtoUtil.enumFromProto(MessageState.class, paymentStartedMessageStateString); processModel.setPaymentStartedMessageState(paymentStartedMessageState); + processModel.setBurningManSelectionHeight(proto.getBurningManSelectionHeight()); if (proto.hasPaymentAccount()) { processModel.setPaymentAccount(PaymentAccount.fromProto(proto.getPaymentAccount(), coreProtoResolver)); @@ -377,6 +385,10 @@ public class ProcessModel implements ProtocolModel { return provider.getTradeWalletService(); } + public BurningManService getBurningManService() { + return provider.getBurningManService(); + } + public User getUser() { return provider.getUser(); } diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/maker/MakerProcessesInputsForDepositTxRequest.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/maker/MakerProcessesInputsForDepositTxRequest.java index c49c2338e2..e2e661212f 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/maker/MakerProcessesInputsForDepositTxRequest.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/maker/MakerProcessesInputsForDepositTxRequest.java @@ -17,6 +17,7 @@ package bisq.core.trade.protocol.bisq_v1.tasks.maker; +import bisq.core.dao.burningman.BurningManService; import bisq.core.exceptions.TradePriceOutOfToleranceException; import bisq.core.offer.Offer; import bisq.core.support.dispute.mediation.mediator.Mediator; @@ -79,6 +80,16 @@ public class MakerProcessesInputsForDepositTxRequest extends TradeTask { tradingPeer.setAccountId(nonEmptyStringOf(request.getTakerAccountId())); + if (BurningManService.isActivated()) { + int takersBurningManSelectionHeight = request.getBurningManSelectionHeight(); + checkArgument(takersBurningManSelectionHeight > 0, "takersBurningManSelectionHeight must not be 0"); + + int makersBurningManSelectionHeight = processModel.getBurningManService().getBurningManSelectionHeight(); + checkArgument(takersBurningManSelectionHeight == makersBurningManSelectionHeight, + "takersBurningManSelectionHeight does no match makersBurningManSelectionHeight"); + processModel.setBurningManSelectionHeight(makersBurningManSelectionHeight); + } + // We set the taker fee only in the processModel yet not in the trade as the tx was only created but not // published yet. Once it was published we move it to trade. The takerFeeTx should be sent in a later // message but that cannot be changed due backward compatibility issues. It is a left over from the diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/CreateTakerFeeTx.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/CreateTakerFeeTx.java index 1371df8616..65217954ae 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/CreateTakerFeeTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/CreateTakerFeeTx.java @@ -24,7 +24,6 @@ import bisq.core.btc.wallet.WalletService; import bisq.core.dao.exceptions.DaoDisabledException; import bisq.core.trade.model.bisq_v1.Trade; import bisq.core.trade.protocol.bisq_v1.tasks.TradeTask; -import bisq.core.util.FeeReceiverSelector; import bisq.common.taskrunner.TaskRunner; @@ -66,7 +65,7 @@ public class CreateTakerFeeTx extends TradeTask { Transaction transaction; if (trade.isCurrencyForTakerFeeBtc()) { - String feeReceiver = FeeReceiverSelector.getAddress(processModel.getFilterManager()); + String feeReceiver = processModel.getBurningManService().getBtcFeeReceiverAddress(); transaction = tradeWalletService.createBtcTradingFeeTx( fundingAddress, reservedForTradeAddress, diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/TakerSendInputsForDepositTxRequest.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/TakerSendInputsForDepositTxRequest.java index 75cfa53d7c..388e300711 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/TakerSendInputsForDepositTxRequest.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/TakerSendInputsForDepositTxRequest.java @@ -104,6 +104,9 @@ public class TakerSendInputsForDepositTxRequest extends TradeTask { byte[] signatureOfNonce = Sig.sign(processModel.getKeyRing().getSignatureKeyPair().getPrivate(), offerId.getBytes(Charsets.UTF_8)); + int burningManSelectionHeight = processModel.getBurningManService().getBurningManSelectionHeight(); + processModel.setBurningManSelectionHeight(burningManSelectionHeight); + String takersPaymentMethodId = checkNotNull(processModel.getPaymentAccountPayload(trade)).getPaymentMethodId(); InputsForDepositTxRequest request = new InputsForDepositTxRequest( offerId, @@ -133,7 +136,8 @@ public class TakerSendInputsForDepositTxRequest extends TradeTask { signatureOfNonce, new Date().getTime(), hashOfTakersPaymentAccountPayload, - takersPaymentMethodId); + takersPaymentMethodId, + burningManSelectionHeight); log.info("Send {} with offerId {} and uid {} to peer {}", request.getClass().getSimpleName(), request.getTradeId(), request.getUid(), trade.getTradingPeerNodeAddress()); diff --git a/core/src/test/java/bisq/core/offer/OpenOfferManagerTest.java b/core/src/test/java/bisq/core/offer/OpenOfferManagerTest.java index d961f6c256..3a7c56a623 100644 --- a/core/src/test/java/bisq/core/offer/OpenOfferManagerTest.java +++ b/core/src/test/java/bisq/core/offer/OpenOfferManagerTest.java @@ -67,6 +67,7 @@ public class OpenOfferManagerTest { null, null, null, + null, persistenceManager ); @@ -114,6 +115,7 @@ public class OpenOfferManagerTest { null, null, null, + null, persistenceManager ); @@ -153,6 +155,7 @@ public class OpenOfferManagerTest { null, null, null, + null, persistenceManager ); diff --git a/proto/src/main/proto/pb.proto b/proto/src/main/proto/pb.proto index 6d229e5b12..686e6d94c2 100644 --- a/proto/src/main/proto/pb.proto +++ b/proto/src/main/proto/pb.proto @@ -174,6 +174,7 @@ message OfferAvailabilityRequest { repeated int32 supported_capabilities = 4; string uid = 5; bool is_taker_api_user = 6; + int32 burning_man_selection_height = 7; // Added in v 1.9.7 } message OfferAvailabilityResponse { @@ -260,6 +261,7 @@ message InputsForDepositTxRequest { NodeAddress refund_agent_node_address = 25; bytes hash_of_takers_payment_account_payload = 26; string takers_payout_method_id = 27; + int32 burning_man_selection_height = 28; // Added in v 1.9.7 } message InputsForDepositTxResponse { @@ -1810,6 +1812,7 @@ message ProcessModel { int64 buyer_payout_amount_from_mediation = 19; int64 seller_payout_amount_from_mediation = 20; PaymentAccount payment_account = 21; + int32 burning_man_selection_height = 22; // Added in v 1.9.7 } message TradingPeer { From eee0b691d061bb410c7e474f2a1ff80a3608c48d Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 3 Nov 2022 18:56:32 -0500 Subject: [PATCH 08/86] Remove FeeReceiverSelector and test as not used anymore Signed-off-by: HenrikJannsen --- .../bisq/core/util/FeeReceiverSelector.java | 86 ----------- .../provider/mempool/TxValidatorTest.java | 3 +- .../core/util/FeeReceiverSelectorTest.java | 142 ------------------ 3 files changed, 1 insertion(+), 230 deletions(-) delete mode 100644 core/src/main/java/bisq/core/util/FeeReceiverSelector.java delete mode 100644 core/src/test/java/bisq/core/util/FeeReceiverSelectorTest.java diff --git a/core/src/main/java/bisq/core/util/FeeReceiverSelector.java b/core/src/main/java/bisq/core/util/FeeReceiverSelector.java deleted file mode 100644 index a7f32e13cd..0000000000 --- a/core/src/main/java/bisq/core/util/FeeReceiverSelector.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * This file is part of Bisq. - * - * Bisq is free software: you can redistribute it and/or modify it - * under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at - * your option) any later version. - * - * Bisq is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public - * License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Bisq. If not, see . - */ - -package bisq.core.util; - -import bisq.core.filter.FilterManager; - -import bisq.common.config.Config; - -import org.bitcoinj.core.Coin; - -import com.google.common.annotations.VisibleForTesting; - -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import java.util.Random; - -import lombok.extern.slf4j.Slf4j; - -@Slf4j -public class FeeReceiverSelector { - public static final String BTC_FEE_RECEIVER_ADDRESS = "38bZBj5peYS3Husdz7AH3gEUiUbYRD951t"; - - public static String getMostRecentAddress() { - return Config.baseCurrencyNetwork().isMainnet() ? BTC_FEE_RECEIVER_ADDRESS : - Config.baseCurrencyNetwork().isTestnet() ? "2N4mVTpUZAnhm9phnxB7VrHB4aBhnWrcUrV" : - "2MzBNTJDjjXgViKBGnatDU3yWkJ8pJkEg9w"; - } - - public static String getAddress(FilterManager filterManager) { - return getAddress(filterManager, new Random()); - } - - @VisibleForTesting - static String getAddress(FilterManager filterManager, Random rnd) { - List feeReceivers = Optional.ofNullable(filterManager.getFilter()) - .flatMap(f -> Optional.ofNullable(f.getBtcFeeReceiverAddresses())) - .orElse(List.of()); - - List amountList = new ArrayList<>(); - List receiverAddressList = new ArrayList<>(); - - feeReceivers.forEach(e -> { - try { - String[] tokens = e.split("#"); - amountList.add(Coin.parseCoin(tokens[1]).longValue()); // total amount the victim should receive - receiverAddressList.add(tokens[0]); // victim's receiver address - } catch (RuntimeException ignore) { - // If input format is not as expected we ignore entry - } - }); - - if (!amountList.isEmpty()) { - return receiverAddressList.get(weightedSelection(amountList, rnd)); - } - - // If no fee address receiver is defined via filter we use the hard coded recent address - return getMostRecentAddress(); - } - - @VisibleForTesting - static int weightedSelection(List weights, Random rnd) { - long sum = weights.stream().mapToLong(n -> n).sum(); - long target = rnd.longs(0, sum).findFirst().orElseThrow(); - int i; - for (i = 0; i < weights.size() && target >= 0; i++) { - target -= weights.get(i); - } - return i - 1; - } -} diff --git a/core/src/test/java/bisq/core/provider/mempool/TxValidatorTest.java b/core/src/test/java/bisq/core/provider/mempool/TxValidatorTest.java index 793941e35a..412e282478 100644 --- a/core/src/test/java/bisq/core/provider/mempool/TxValidatorTest.java +++ b/core/src/test/java/bisq/core/provider/mempool/TxValidatorTest.java @@ -22,7 +22,6 @@ import bisq.core.dao.state.DaoStateService; import bisq.core.filter.Filter; import bisq.core.filter.FilterManager; import bisq.core.trade.DelayedPayoutAddressProvider; -import bisq.core.util.FeeReceiverSelector; import bisq.core.util.ParsingUtils; import bisq.core.util.coin.BsqFormatter; @@ -65,7 +64,7 @@ public class TxValidatorTest { btcFeeReceivers.add("13sxMq8mTw7CTSqgGiMPfwo6ZDsVYrHLmR"); btcFeeReceivers.add("19qA2BVPoyXDfHKVMovKG7SoxGY7xrBV8c"); btcFeeReceivers.add("19BNi5EpZhgBBWAt5ka7xWpJpX2ZWJEYyq"); - btcFeeReceivers.add(FeeReceiverSelector.BTC_FEE_RECEIVER_ADDRESS); + btcFeeReceivers.add("38bZBj5peYS3Husdz7AH3gEUiUbYRD951t"); btcFeeReceivers.add(DelayedPayoutAddressProvider.BM2019_ADDRESS); btcFeeReceivers.add("1BVxNn3T12veSK6DgqwU4Hdn7QHcDDRag7"); btcFeeReceivers.add("3A8Zc1XioE2HRzYfbb5P8iemCS72M6vRJV"); diff --git a/core/src/test/java/bisq/core/util/FeeReceiverSelectorTest.java b/core/src/test/java/bisq/core/util/FeeReceiverSelectorTest.java deleted file mode 100644 index 8ddf70cb15..0000000000 --- a/core/src/test/java/bisq/core/util/FeeReceiverSelectorTest.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * This file is part of Bisq. - * - * Bisq is free software: you can redistribute it and/or modify it - * under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at - * your option) any later version. - * - * Bisq is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public - * License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Bisq. If not, see . - */ - -package bisq.core.util; - -import bisq.core.filter.Filter; -import bisq.core.filter.FilterManager; - -import com.google.common.collect.Lists; -import com.google.common.primitives.Longs; - -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Random; - -import org.mockito.Mock; -import org.mockito.junit.MockitoJUnitRunner; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.when; - -@RunWith(MockitoJUnitRunner.class) -public class FeeReceiverSelectorTest { - @Mock - private FilterManager filterManager; - - @Test - public void testGetAddress() { - Random rnd = new Random(123); - when(filterManager.getFilter()).thenReturn(filterWithReceivers( - List.of("", "foo#0.001", "ill-formed", "bar#0.002", "baz#0.001", "partial#bad"))); - - Map selectionCounts = new HashMap<>(); - for (int i = 0; i < 400; i++) { - String address = FeeReceiverSelector.getAddress(filterManager, rnd); - selectionCounts.compute(address, (k, n) -> n != null ? n + 1 : 1); - } - - assertEquals(3, selectionCounts.size()); - - // Check within 2 std. of the expected values (95% confidence each): - assertEquals(100.0, selectionCounts.get("foo"), 18); - assertEquals(200.0, selectionCounts.get("bar"), 20); - assertEquals(100.0, selectionCounts.get("baz"), 18); - } - - @Test - public void testGetAddress_noValidReceivers_nullFilter() { - when(filterManager.getFilter()).thenReturn(null); - assertEquals(FeeReceiverSelector.getMostRecentAddress(), FeeReceiverSelector.getAddress(filterManager)); - } - - @Test - public void testGetAddress_noValidReceivers_filterWithNullList() { - when(filterManager.getFilter()).thenReturn(filterWithReceivers(null)); - assertEquals(FeeReceiverSelector.getMostRecentAddress(), FeeReceiverSelector.getAddress(filterManager)); - } - - @Test - public void testGetAddress_noValidReceivers_filterWithEmptyList() { - when(filterManager.getFilter()).thenReturn(filterWithReceivers(List.of())); - assertEquals(FeeReceiverSelector.getMostRecentAddress(), FeeReceiverSelector.getAddress(filterManager)); - } - - @Test - public void testGetAddress_noValidReceivers_filterWithIllFormedList() { - when(filterManager.getFilter()).thenReturn(filterWithReceivers(List.of("ill-formed"))); - assertEquals(FeeReceiverSelector.getMostRecentAddress(), FeeReceiverSelector.getAddress(filterManager)); - } - - @Test - public void testWeightedSelection() { - Random rnd = new Random(456); - - int[] selections = new int[3]; - for (int i = 0; i < 6000; i++) { - selections[FeeReceiverSelector.weightedSelection(Longs.asList(1, 2, 3), rnd)]++; - } - - // Check within 2 std. of the expected values (95% confidence each): - assertEquals(1000.0, selections[0], 58); - assertEquals(2000.0, selections[1], 74); - assertEquals(3000.0, selections[2], 78); - } - - private static Filter filterWithReceivers(List btcFeeReceiverAddresses) { - return new Filter(Lists.newArrayList(), - Lists.newArrayList(), - Lists.newArrayList(), - Lists.newArrayList(), - Lists.newArrayList(), - Lists.newArrayList(), - Lists.newArrayList(), - Lists.newArrayList(), - false, - Lists.newArrayList(), - false, - null, - null, - Lists.newArrayList(), - Lists.newArrayList(), - Lists.newArrayList(), - btcFeeReceiverAddresses, - null, - 0, - null, - null, - null, - null, - false, - Lists.newArrayList(), - new HashSet<>(), - false, - false, - false, - 0, - Lists.newArrayList(), - 0, - 0, - 0, - 0); - } -} From 7b280c4a990a862afe5795fad85b217a9ea9be99 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 3 Nov 2022 20:00:59 -0500 Subject: [PATCH 09/86] Use Burningmen receivers for delayed payout tx. Add verification by re-creating receivers and check txId of both DPTs. Signed-off-by: HenrikJannsen --- .../core/btc/wallet/TradeWalletService.java | 21 ++++++++-- .../BuyerVerifiesFinalDelayedPayoutTx.java | 37 +++++++++++++++--- .../BuyerVerifiesPreparedDelayedPayoutTx.java | 39 +++++++++++++++---- .../seller/SellerCreatesDelayedPayoutTx.java | 34 ++++++++++++---- 4 files changed, 108 insertions(+), 23 deletions(-) diff --git a/core/src/main/java/bisq/core/btc/wallet/TradeWalletService.java b/core/src/main/java/bisq/core/btc/wallet/TradeWalletService.java index 2df405287d..48cfc7d117 100644 --- a/core/src/main/java/bisq/core/btc/wallet/TradeWalletService.java +++ b/core/src/main/java/bisq/core/btc/wallet/TradeWalletService.java @@ -696,16 +696,31 @@ public class TradeWalletService { // Delayed payout tx /////////////////////////////////////////////////////////////////////////////////////////// + public Transaction createDelayedUnsignedPayoutTx(Transaction depositTx, + List> receivers, + long lockTime) + throws AddressFormatException, TransactionVerificationException { + TransactionOutput depositTxOutput = depositTx.getOutput(0); + Transaction delayedPayoutTx = new Transaction(params); + delayedPayoutTx.addInput(depositTxOutput); + applyLockTime(lockTime, delayedPayoutTx); + checkArgument(!receivers.isEmpty(), "receivers must not be empty"); + receivers.forEach(receiver -> delayedPayoutTx.addOutput(Coin.valueOf(receiver.first), Address.fromString(params, receiver.second))); + WalletService.printTx("Unsigned delayedPayoutTx ToDonationAddress", delayedPayoutTx); + WalletService.verifyTransaction(delayedPayoutTx); + return delayedPayoutTx; + } + public Transaction createDelayedUnsignedPayoutTx(Transaction depositTx, String donationAddressString, Coin minerFee, long lockTime) throws AddressFormatException, TransactionVerificationException { - TransactionOutput hashedMultiSigOutput = depositTx.getOutput(0); + TransactionOutput depositTxOutput = depositTx.getOutput(0); Transaction delayedPayoutTx = new Transaction(params); - delayedPayoutTx.addInput(hashedMultiSigOutput); + delayedPayoutTx.addInput(depositTxOutput); applyLockTime(lockTime, delayedPayoutTx); - Coin outputAmount = hashedMultiSigOutput.getValue().subtract(minerFee); + Coin outputAmount = depositTxOutput.getValue().subtract(minerFee); delayedPayoutTx.addOutput(outputAmount, Address.fromString(params, donationAddressString)); WalletService.printTx("Unsigned delayedPayoutTx ToDonationAddress", delayedPayoutTx); WalletService.verifyTransaction(delayedPayoutTx); diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java index 6b5f6e0fae..abce4d1120 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java @@ -17,16 +17,22 @@ package bisq.core.trade.protocol.bisq_v1.tasks.buyer; +import bisq.core.btc.wallet.BtcWalletService; +import bisq.core.dao.burningman.BurningManService; import bisq.core.trade.bisq_v1.TradeDataValidation; import bisq.core.trade.model.bisq_v1.Trade; import bisq.core.trade.protocol.bisq_v1.tasks.TradeTask; import bisq.common.taskrunner.TaskRunner; +import bisq.common.util.Tuple2; import org.bitcoinj.core.Transaction; +import java.util.List; + import lombok.extern.slf4j.Slf4j; +import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; @Slf4j @@ -40,17 +46,36 @@ public class BuyerVerifiesFinalDelayedPayoutTx extends TradeTask { try { runInterceptHook(); - Transaction delayedPayoutTx = trade.getDelayedPayoutTx(); - checkNotNull(delayedPayoutTx, "trade.getDelayedPayoutTx() must not be null"); + BtcWalletService btcWalletService = processModel.getBtcWalletService(); + Transaction finalDelayedPayoutTx = trade.getDelayedPayoutTx(); + checkNotNull(finalDelayedPayoutTx, "trade.getDelayedPayoutTx() must not be null"); + // Check again tx TradeDataValidation.validateDelayedPayoutTx(trade, - delayedPayoutTx, - processModel.getBtcWalletService()); + finalDelayedPayoutTx, + btcWalletService); - // Now as we know the deposit tx we can also verify the input Transaction depositTx = trade.getDepositTx(); checkNotNull(depositTx, "trade.getDepositTx() must not be null"); - TradeDataValidation.validatePayoutTxInput(depositTx, delayedPayoutTx); + // Now as we know the deposit tx we can also verify the input + TradeDataValidation.validatePayoutTxInput(depositTx, finalDelayedPayoutTx); + + if (BurningManService.isActivated()) { + long inputAmount = depositTx.getOutput(0).getValue().value; + long tradeTxFeeAsLong = trade.getTradeTxFeeAsLong(); + List> delayedPayoutTxReceivers = processModel.getBurningManService().getDelayedPayoutTxReceivers( + processModel.getBurningManSelectionHeight(), + inputAmount, + tradeTxFeeAsLong); + + long lockTime = trade.getLockTime(); + Transaction buyersDelayedPayoutTx = processModel.getTradeWalletService().createDelayedUnsignedPayoutTx( + depositTx, + delayedPayoutTxReceivers, + lockTime); + checkArgument(buyersDelayedPayoutTx.getTxId().equals(finalDelayedPayoutTx.getTxId()), + "TxIds of buyersDelayedPayoutTx and finalDelayedPayoutTx must be the same"); + } complete(); } catch (TradeDataValidation.ValidationException e) { diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesPreparedDelayedPayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesPreparedDelayedPayoutTx.java index 77f04f4757..51a9f0d363 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesPreparedDelayedPayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesPreparedDelayedPayoutTx.java @@ -17,14 +17,22 @@ package bisq.core.trade.protocol.bisq_v1.tasks.buyer; +import bisq.core.btc.wallet.BtcWalletService; +import bisq.core.dao.burningman.BurningManService; import bisq.core.trade.bisq_v1.TradeDataValidation; import bisq.core.trade.model.bisq_v1.Trade; import bisq.core.trade.protocol.bisq_v1.tasks.TradeTask; import bisq.common.taskrunner.TaskRunner; +import bisq.common.util.Tuple2; + +import org.bitcoinj.core.Transaction; + +import java.util.List; import lombok.extern.slf4j.Slf4j; +import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; @Slf4j @@ -38,19 +46,36 @@ public class BuyerVerifiesPreparedDelayedPayoutTx extends TradeTask { try { runInterceptHook(); - var preparedDelayedPayoutTx = processModel.getPreparedDelayedPayoutTx(); + Transaction sellersPreparedDelayedPayoutTx = checkNotNull(processModel.getPreparedDelayedPayoutTx()); + BtcWalletService btcWalletService = processModel.getBtcWalletService(); TradeDataValidation.validateDelayedPayoutTx(trade, - preparedDelayedPayoutTx, - processModel.getBtcWalletService()); + sellersPreparedDelayedPayoutTx, + btcWalletService); + + Transaction preparedDepositTx = btcWalletService.getTxFromSerializedTx(processModel.getPreparedDepositTx()); + if (BurningManService.isActivated()) { + long inputAmount = preparedDepositTx.getOutput(0).getValue().value; + long tradeTxFeeAsLong = trade.getTradeTxFeeAsLong(); + List> delayedPayoutTxReceivers = processModel.getBurningManService().getDelayedPayoutTxReceivers( + processModel.getBurningManSelectionHeight(), + inputAmount, + tradeTxFeeAsLong); + + long lockTime = trade.getLockTime(); + Transaction buyersPreparedDelayedPayoutTx = processModel.getTradeWalletService().createDelayedUnsignedPayoutTx( + preparedDepositTx, + delayedPayoutTxReceivers, + lockTime); + checkArgument(buyersPreparedDelayedPayoutTx.getTxId().equals(sellersPreparedDelayedPayoutTx.getTxId()), + "TxIds of buyersPreparedDelayedPayoutTx and sellersPreparedDelayedPayoutTx must be the same"); + } // If the deposit tx is non-malleable, we already know its final ID, so should check that now // before sending any further data to the seller, to provide extra protection for the buyer. if (isDepositTxNonMalleable()) { - var preparedDepositTx = processModel.getBtcWalletService().getTxFromSerializedTx( - processModel.getPreparedDepositTx()); - TradeDataValidation.validatePayoutTxInput(preparedDepositTx, checkNotNull(preparedDelayedPayoutTx)); + TradeDataValidation.validatePayoutTxInput(preparedDepositTx, sellersPreparedDelayedPayoutTx); } else { - log.info("Deposit tx is malleable, so we skip preparedDelayedPayoutTx input validation."); + log.info("Deposit tx is malleable, so we skip sellersPreparedDelayedPayoutTx input validation."); } complete(); diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java index 5e7f76b2ad..6cfdaca4c0 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java @@ -18,16 +18,20 @@ package bisq.core.trade.protocol.bisq_v1.tasks.seller; import bisq.core.btc.wallet.TradeWalletService; +import bisq.core.dao.burningman.BurningManService; import bisq.core.dao.governance.param.Param; import bisq.core.trade.bisq_v1.TradeDataValidation; import bisq.core.trade.model.bisq_v1.Trade; import bisq.core.trade.protocol.bisq_v1.tasks.TradeTask; import bisq.common.taskrunner.TaskRunner; +import bisq.common.util.Tuple2; import org.bitcoinj.core.Coin; import org.bitcoinj.core.Transaction; +import java.util.List; + import lombok.extern.slf4j.Slf4j; import static com.google.common.base.Preconditions.checkNotNull; @@ -44,16 +48,32 @@ public class SellerCreatesDelayedPayoutTx extends TradeTask { try { runInterceptHook(); - String donationAddressString = processModel.getDaoFacade().getParamValue(Param.RECIPIENT_BTC_ADDRESS); - Coin minerFee = trade.getTradeTxFee(); TradeWalletService tradeWalletService = processModel.getTradeWalletService(); Transaction depositTx = checkNotNull(processModel.getDepositTx()); + Transaction preparedDelayedPayoutTx; + if (BurningManService.isActivated()) { + long inputAmount = depositTx.getOutput(0).getValue().value; + long tradeTxFeeAsLong = trade.getTradeTxFeeAsLong(); + List> delayedPayoutTxReceivers = processModel.getBurningManService().getDelayedPayoutTxReceivers( + processModel.getBurningManSelectionHeight(), + inputAmount, + tradeTxFeeAsLong); + + long lockTime = trade.getLockTime(); + preparedDelayedPayoutTx = tradeWalletService.createDelayedUnsignedPayoutTx( + depositTx, + delayedPayoutTxReceivers, + lockTime); + } else { + String donationAddressString = processModel.getDaoFacade().getParamValue(Param.RECIPIENT_BTC_ADDRESS); + Coin minerFee = trade.getTradeTxFee(); + long lockTime = trade.getLockTime(); + preparedDelayedPayoutTx = tradeWalletService.createDelayedUnsignedPayoutTx(depositTx, + donationAddressString, + minerFee, + lockTime); + } - long lockTime = trade.getLockTime(); - Transaction preparedDelayedPayoutTx = tradeWalletService.createDelayedUnsignedPayoutTx(depositTx, - donationAddressString, - minerFee, - lockTime); TradeDataValidation.validateDelayedPayoutTx(trade, preparedDelayedPayoutTx, processModel.getBtcWalletService()); From 060b9c476ee3db6c2a66c1883b36391d32b91446 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 3 Nov 2022 20:19:12 -0500 Subject: [PATCH 10/86] Validate delayedPayoutTx outputs size and amount only if BurningManService.isActivated is false. Signed-off-by: HenrikJannsen --- .../dao/burningman/BurningManService.java | 2 +- .../support/dispute/DisputeValidation.java | 1 - .../trade/bisq_v1/TradeDataValidation.java | 49 ++++++++++--------- 3 files changed, 27 insertions(+), 25 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index 7d4f63e352..35ce2b6d78 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -72,7 +72,7 @@ import lombok.extern.slf4j.Slf4j; public class BurningManService implements DaoStateListener { public static final Date ACTIVATION_DATE = Utilities.getUTCDate(2022, GregorianCalendar.OCTOBER, 25); private static final double GENESIS_OUTPUT_AMOUNT_FACTOR = 0.1; // Means amounts at genesis height gets reduced to 10% - private static final String GENESIS_OUTPUT_PREFIX = "Co-founder-"; + private static final String GENESIS_OUTPUT_PREFIX = "Bisq co-founder "; private static final int MAX_COMP_REQUEST_AGE = 105120; // 2 years in blocks (2*365*144) // 312 for regtest with 2*12*13 (13 is block cycle) private static final int MAX_BURN_AMOUNT_AGE = 52560; // 1 years in blocks (365*144) // 156 for regtest with 12*13 (13 is block cycle) private static final int NUM_REIMBURSEMENT_CYCLES = 12; // We use reimbursements of the past 12 cycles diff --git a/core/src/main/java/bisq/core/support/dispute/DisputeValidation.java b/core/src/main/java/bisq/core/support/dispute/DisputeValidation.java index f8161f94e1..42270c093a 100644 --- a/core/src/main/java/bisq/core/support/dispute/DisputeValidation.java +++ b/core/src/main/java/bisq/core/support/dispute/DisputeValidation.java @@ -244,7 +244,6 @@ public class DisputeValidation { Map> disputesPerDelayedPayoutTxId, Map> disputesPerDepositTxId) throws DisputeReplayException { - try { String disputeToTestTradeId = disputeToTest.getTradeId(); String disputeToTestDelayedPayoutTxId = disputeToTest.getDelayedPayoutTxId(); diff --git a/core/src/main/java/bisq/core/trade/bisq_v1/TradeDataValidation.java b/core/src/main/java/bisq/core/trade/bisq_v1/TradeDataValidation.java index 77e5bb1166..dc74c00abe 100644 --- a/core/src/main/java/bisq/core/trade/bisq_v1/TradeDataValidation.java +++ b/core/src/main/java/bisq/core/trade/bisq_v1/TradeDataValidation.java @@ -18,6 +18,7 @@ package bisq.core.trade.bisq_v1; import bisq.core.btc.wallet.BtcWalletService; +import bisq.core.dao.burningman.BurningManService; import bisq.core.offer.Offer; import bisq.core.support.dispute.DisputeValidation; import bisq.core.trade.model.bisq_v1.Trade; @@ -71,13 +72,6 @@ public class TradeDataValidation { throw new InvalidTxException(errorMsg); } - if (delayedPayoutTx.getOutputs().size() != 1) { - errorMsg = "Number of delayedPayoutTx outputs must be 1"; - log.error(errorMsg); - log.error(delayedPayoutTx.toString()); - throw new InvalidTxException(errorMsg); - } - // connectedOutput is null and input.getValue() is null at that point as the tx is not committed to the wallet // yet. So we cannot check that the input matches but we did the amount check earlier in the trade protocol. @@ -97,24 +91,33 @@ public class TradeDataValidation { throw new InvalidLockTimeException(errorMsg); } - // Check amount - TransactionOutput output = delayedPayoutTx.getOutput(0); - Offer offer = checkNotNull(trade.getOffer()); - Coin msOutputAmount = offer.getBuyerSecurityDeposit() - .add(offer.getSellerSecurityDeposit()) - .add(checkNotNull(trade.getAmount())); + if (!BurningManService.isActivated()) { + if (delayedPayoutTx.getOutputs().size() != 1) { + errorMsg = "Number of delayedPayoutTx outputs must be 1"; + log.error(errorMsg); + log.error(delayedPayoutTx.toString()); + throw new InvalidTxException(errorMsg); + } - if (!output.getValue().equals(msOutputAmount)) { - errorMsg = "Output value of deposit tx and delayed payout tx is not matching. Output: " + output + " / msOutputAmount: " + msOutputAmount; - log.error(errorMsg); - log.error(delayedPayoutTx.toString()); - throw new InvalidAmountException(errorMsg); - } + // Check amount + TransactionOutput output = delayedPayoutTx.getOutput(0); + Offer offer = checkNotNull(trade.getOffer()); + Coin msOutputAmount = offer.getBuyerSecurityDeposit() + .add(offer.getSellerSecurityDeposit()) + .add(checkNotNull(trade.getAmount())); - NetworkParameters params = btcWalletService.getParams(); - String delayedPayoutTxOutputAddress = output.getScriptPubKey().getToAddress(params).toString(); - if (addressConsumer != null) { - addressConsumer.accept(delayedPayoutTxOutputAddress); + if (!output.getValue().equals(msOutputAmount)) { + errorMsg = "Output value of deposit tx and delayed payout tx is not matching. Output: " + output + " / msOutputAmount: " + msOutputAmount; + log.error(errorMsg); + log.error(delayedPayoutTx.toString()); + throw new InvalidAmountException(errorMsg); + } + + NetworkParameters params = btcWalletService.getParams(); + String delayedPayoutTxOutputAddress = output.getScriptPubKey().getToAddress(params).toString(); + if (addressConsumer != null) { + addressConsumer.accept(delayedPayoutTxOutputAddress); + } } } From e16a9b00b18b7decb5d1f97db0b3eda7c6be38e6 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 3 Nov 2022 21:11:39 -0500 Subject: [PATCH 11/86] Add verifyDelayedPayoutTxReceivers method in RefundManager. Add burningManSelectionHeight and tradeTxFee in Dispute. Call validateDonationAddressMatchesAnyPastParamValues and validateDonationAddress only if legacy BM was used. Signed-off-by: HenrikJannsen --- .../dao/burningman/BurningManService.java | 5 ---- .../bisq/core/support/dispute/Dispute.java | 24 ++++++++++++++-- .../core/support/dispute/DisputeManager.java | 18 ++++++++---- .../support/dispute/DisputeValidation.java | 6 ++-- .../support/dispute/refund/RefundManager.java | 28 +++++++++++++++++++ .../trade/bisq_v1/TradeDataValidation.java | 3 +- .../bisq/core/trade/model/bisq_v1/Trade.java | 5 ++++ .../windows/DisputeSummaryWindow.java | 13 +++++++-- .../pendingtrades/PendingTradesDataModel.java | 6 ++++ proto/src/main/proto/pb.proto | 2 ++ 10 files changed, 89 insertions(+), 21 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index 35ce2b6d78..5a762686d4 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -84,11 +84,6 @@ public class BurningManService implements DaoStateListener { return new Date().after(ACTIVATION_DATE); } - //todo maybe we should use value from DAO param - public static String getLegacyBurningManAddress() { - return Param.RECIPIENT_BTC_ADDRESS.getDefaultValue(); - } - private final DaoStateService daoStateService; private final CycleService cycleService; private final ProposalService proposalService; diff --git a/core/src/main/java/bisq/core/support/dispute/Dispute.java b/core/src/main/java/bisq/core/support/dispute/Dispute.java index c93510371e..126cc50428 100644 --- a/core/src/main/java/bisq/core/support/dispute/Dispute.java +++ b/core/src/main/java/bisq/core/support/dispute/Dispute.java @@ -77,7 +77,6 @@ import javax.annotation.Nullable; @EqualsAndHashCode @Getter public final class Dispute implements NetworkPayload, PersistablePayload { - public enum State { NEEDS_UPGRADE, NEW, @@ -146,6 +145,13 @@ public final class Dispute implements NetworkPayload, PersistablePayload { // Added at v1.6.0 private Dispute.State disputeState = State.NEW; + // Added in v 1.9.7 + @Setter + private int burningManSelectionHeight; + @Setter + private long tradeTxFee; + + // Should be only used in emergency case if we need to add data but do not want to break backward compatibility // at the P2P network storage checks. The hash of the object will be used to verify if the data is valid. Any new // field in a class would break that hash and therefore break the storage mechanism. @@ -263,7 +269,9 @@ public final class Dispute implements NetworkPayload, PersistablePayload { .setIsClosed(this.isClosed()) .setOpeningDate(openingDate) .setState(Dispute.State.toProtoMessage(disputeState)) - .setId(id); + .setId(id) + .setBurningManSelectionHeight(burningManSelectionHeight) + .setTradeTxFee(tradeTxFee); Optional.ofNullable(contractHash).ifPresent(e -> builder.setContractHash(ByteString.copyFrom(e))); Optional.ofNullable(depositTxSerialized).ifPresent(e -> builder.setDepositTxSerialized(ByteString.copyFrom(e))); @@ -330,6 +338,9 @@ public final class Dispute implements NetworkPayload, PersistablePayload { dispute.setDonationAddressOfDelayedPayoutTx(donationAddressOfDelayedPayoutTx); } + dispute.setBurningManSelectionHeight(proto.getBurningManSelectionHeight()); + dispute.setTradeTxFee(proto.getTradeTxFee()); + if (Dispute.State.fromProto(proto.getState()) == State.NEEDS_UPGRADE) { // old disputes did not have a state field, so choose an appropriate state: dispute.setState(proto.getIsClosed() ? State.CLOSED : State.OPEN); @@ -516,6 +527,13 @@ public final class Dispute implements NetworkPayload, PersistablePayload { return cachedDepositTx; } + // Dispute agents might receive disputes created before activation date. + // By checking if burningManSelectionHeight is > 0 we can detect if the trade was created with + // the new burningmen receivers or not. + public boolean isUsingLegacyBurningMan() { + return burningManSelectionHeight == 0; + } + @Override public String toString() { return "Dispute{" + @@ -550,6 +568,8 @@ public final class Dispute implements NetworkPayload, PersistablePayload { ",\n delayedPayoutTxId='" + delayedPayoutTxId + '\'' + ",\n donationAddressOfDelayedPayoutTx='" + donationAddressOfDelayedPayoutTx + '\'' + ",\n cachedDepositTx='" + cachedDepositTx + '\'' + + ",\n burningManSelectionHeight='" + burningManSelectionHeight + '\'' + + ",\n tradeTxFee='" + tradeTxFee + '\'' + "\n}"; } } diff --git a/core/src/main/java/bisq/core/support/dispute/DisputeManager.java b/core/src/main/java/bisq/core/support/dispute/DisputeManager.java index 6163c70039..88e5b86f6f 100644 --- a/core/src/main/java/bisq/core/support/dispute/DisputeManager.java +++ b/core/src/main/java/bisq/core/support/dispute/DisputeManager.java @@ -273,8 +273,10 @@ public abstract class DisputeManager> extends Sup List disputes = getDisputeList().getList(); disputes.forEach(dispute -> { try { - DisputeValidation.validateDonationAddressMatchesAnyPastParamValues(dispute, dispute.getDonationAddressOfDelayedPayoutTx(), daoFacade); DisputeValidation.validateNodeAddresses(dispute, config); + if (dispute.isUsingLegacyBurningMan()) { + DisputeValidation.validateDonationAddressMatchesAnyPastParamValues(dispute, dispute.getDonationAddressOfDelayedPayoutTx(), daoFacade); + } } catch (DisputeValidation.AddressException | DisputeValidation.NodeAddressException e) { log.error(e.toString()); validationExceptions.add(e); @@ -371,8 +373,10 @@ public abstract class DisputeManager> extends Sup DisputeValidation.validateDisputeData(dispute, btcWalletService); DisputeValidation.validateNodeAddresses(dispute, config); DisputeValidation.validateSenderNodeAddress(dispute, openNewDisputeMessage.getSenderNodeAddress()); - DisputeValidation.validateDonationAddressMatchesAnyPastParamValues(dispute, dispute.getDonationAddressOfDelayedPayoutTx(), daoFacade); DisputeValidation.testIfDisputeTriesReplay(dispute, disputeList.getList()); + if (dispute.isUsingLegacyBurningMan()) { + DisputeValidation.validateDonationAddressMatchesAnyPastParamValues(dispute, dispute.getDonationAddressOfDelayedPayoutTx(), daoFacade); + } } catch (DisputeValidation.ValidationException e) { log.error(e.toString()); validationExceptions.add(e); @@ -401,13 +405,15 @@ public abstract class DisputeManager> extends Sup DisputeValidation.validateDisputeData(dispute, btcWalletService); DisputeValidation.validateNodeAddresses(dispute, config); DisputeValidation.validateTradeAndDispute(dispute, trade); - DisputeValidation.validateDonationAddress(dispute, - Objects.requireNonNull(trade.getDelayedPayoutTx()), - btcWalletService.getParams(), - daoFacade); TradeDataValidation.validateDelayedPayoutTx(trade, trade.getDelayedPayoutTx(), btcWalletService); + if (dispute.isUsingLegacyBurningMan()) { + DisputeValidation.validateDonationAddress(dispute, + Objects.requireNonNull(trade.getDelayedPayoutTx()), + btcWalletService.getParams()); + DisputeValidation.validateDonationAddressMatchesAnyPastParamValues(dispute, dispute.getDonationAddressOfDelayedPayoutTx(), daoFacade); + } } catch (TradeDataValidation.ValidationException | DisputeValidation.ValidationException e) { // The peer sent us an invalid donation address. We do not return here as we don't want to break // mediation/arbitration and log only the issue. The dispute agent will run validation as well and will get diff --git a/core/src/main/java/bisq/core/support/dispute/DisputeValidation.java b/core/src/main/java/bisq/core/support/dispute/DisputeValidation.java index 42270c093a..0dc8a8c1b6 100644 --- a/core/src/main/java/bisq/core/support/dispute/DisputeValidation.java +++ b/core/src/main/java/bisq/core/support/dispute/DisputeValidation.java @@ -156,8 +156,7 @@ public class DisputeValidation { public static void validateDonationAddress(Dispute dispute, Transaction delayedPayoutTx, - NetworkParameters params, - DaoFacade daoFacade) + NetworkParameters params) throws AddressException { TransactionOutput output = delayedPayoutTx.getOutput(0); Address address = output.getScriptPubKey().getToAddress(params); @@ -167,10 +166,9 @@ public class DisputeValidation { log.error(delayedPayoutTx.toString()); throw new DisputeValidation.AddressException(dispute, errorMsg); } - String delayedPayoutTxOutputAddress = address.toString(); - validateDonationAddressMatchesAnyPastParamValues(dispute, delayedPayoutTxOutputAddress, daoFacade); // Verify that address in the dispute matches the one in the trade. + String delayedPayoutTxOutputAddress = address.toString(); checkArgument(delayedPayoutTxOutputAddress.equals(dispute.getDonationAddressOfDelayedPayoutTx()), "donationAddressOfDelayedPayoutTx from dispute does not match address from delayed payout tx"); } diff --git a/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java b/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java index 4e52c51398..50ba6aafb5 100644 --- a/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java +++ b/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java @@ -21,6 +21,7 @@ import bisq.core.btc.setup.WalletsSetup; import bisq.core.btc.wallet.BtcWalletService; import bisq.core.btc.wallet.TradeWalletService; import bisq.core.dao.DaoFacade; +import bisq.core.dao.burningman.BurningManService; import bisq.core.locale.Res; import bisq.core.offer.OpenOffer; import bisq.core.offer.OpenOfferManager; @@ -50,11 +51,13 @@ import bisq.common.app.Version; import bisq.common.config.Config; import bisq.common.crypto.KeyRing; import bisq.common.util.Hex; +import bisq.common.util.Tuple2; import org.bitcoinj.core.NetworkParameters; import org.bitcoinj.core.Transaction; import org.bitcoinj.core.TransactionInput; import org.bitcoinj.core.TransactionOutPoint; +import org.bitcoinj.core.TransactionOutput; import com.google.inject.Inject; import com.google.inject.Singleton; @@ -74,8 +77,10 @@ import static com.google.common.base.Preconditions.checkNotNull; @Slf4j @Singleton public final class RefundManager extends DisputeManager { + private final BurningManService burningManService; private final MempoolService mempoolService; + /////////////////////////////////////////////////////////////////////////////////////////// // Constructor /////////////////////////////////////////////////////////////////////////////////////////// @@ -89,6 +94,7 @@ public final class RefundManager extends DisputeManager { ClosedTradableManager closedTradableManager, OpenOfferManager openOfferManager, DaoFacade daoFacade, + BurningManService burningManService, KeyRing keyRing, RefundDisputeListService refundDisputeListService, Config config, @@ -97,6 +103,7 @@ public final class RefundManager extends DisputeManager { super(p2PService, tradeWalletService, walletService, walletsSetup, tradeManager, closedTradableManager, openOfferManager, daoFacade, keyRing, refundDisputeListService, config, priceFeedService); + this.burningManService = burningManService; this.mempoolService = mempoolService; } @@ -308,4 +315,25 @@ public final class RefundManager extends DisputeManager { checkArgument(fundingTxId.equals(depositTx.getTxId().toString()), "First input at delayedPayoutTx does not connect to depositTx"); } + + public void verifyDelayedPayoutTxReceivers(Transaction delayedPayoutTx, Dispute dispute) { + Transaction depositTx = dispute.findDepositTx(btcWalletService).orElseThrow(); + long inputAmount = depositTx.getOutput(0).getValue().value; + List> delayedPayoutTxReceivers = burningManService.getDelayedPayoutTxReceivers( + dispute.getBurningManSelectionHeight(), + inputAmount, + dispute.getTradeTxFee()); + checkArgument(delayedPayoutTx.getOutputs().size() == delayedPayoutTxReceivers.size(), + "Size of outputs and delayedPayoutTxReceivers must be the same"); + + NetworkParameters params = btcWalletService.getParams(); + for (int i = 0; i < delayedPayoutTx.getOutputs().size(); i++) { + TransactionOutput transactionOutput = delayedPayoutTx.getOutputs().get(i); + Tuple2 receiverTuple = delayedPayoutTxReceivers.get(0); + checkArgument(transactionOutput.getScriptPubKey().getToAddress(params).toString().equals(receiverTuple.second), + "output address does not match delayedPayoutTxReceivers address. transactionOutput=" + transactionOutput); + checkArgument(transactionOutput.getValue().value == receiverTuple.first, + "output value does not match delayedPayoutTxReceivers value. transactionOutput=" + transactionOutput); + } + } } diff --git a/core/src/main/java/bisq/core/trade/bisq_v1/TradeDataValidation.java b/core/src/main/java/bisq/core/trade/bisq_v1/TradeDataValidation.java index dc74c00abe..745dd06224 100644 --- a/core/src/main/java/bisq/core/trade/bisq_v1/TradeDataValidation.java +++ b/core/src/main/java/bisq/core/trade/bisq_v1/TradeDataValidation.java @@ -18,7 +18,6 @@ package bisq.core.trade.bisq_v1; import bisq.core.btc.wallet.BtcWalletService; -import bisq.core.dao.burningman.BurningManService; import bisq.core.offer.Offer; import bisq.core.support.dispute.DisputeValidation; import bisq.core.trade.model.bisq_v1.Trade; @@ -91,7 +90,7 @@ public class TradeDataValidation { throw new InvalidLockTimeException(errorMsg); } - if (!BurningManService.isActivated()) { + if (trade.isUsingLegacyBurningMan()) { if (delayedPayoutTx.getOutputs().size() != 1) { errorMsg = "Number of delayedPayoutTx outputs must be 1"; log.error(errorMsg); diff --git a/core/src/main/java/bisq/core/trade/model/bisq_v1/Trade.java b/core/src/main/java/bisq/core/trade/model/bisq_v1/Trade.java index 35b6048ecc..4f0730e208 100644 --- a/core/src/main/java/bisq/core/trade/model/bisq_v1/Trade.java +++ b/core/src/main/java/bisq/core/trade/model/bisq_v1/Trade.java @@ -1067,6 +1067,11 @@ public abstract class Trade extends TradeModel { return offer != null && offer.isBsqSwapOffer(); } + // By checking if burningManSelectionHeight is > 0 we can detect if the trade was created with + // the new burningmen receivers or not. + public boolean isUsingLegacyBurningMan() { + return processModel.getBurningManSelectionHeight() == 0; + } /////////////////////////////////////////////////////////////////////////////////////////// // Private diff --git a/desktop/src/main/java/bisq/desktop/main/overlays/windows/DisputeSummaryWindow.java b/desktop/src/main/java/bisq/desktop/main/overlays/windows/DisputeSummaryWindow.java index 15fa5102f5..55cfebac1d 100644 --- a/desktop/src/main/java/bisq/desktop/main/overlays/windows/DisputeSummaryWindow.java +++ b/desktop/src/main/java/bisq/desktop/main/overlays/windows/DisputeSummaryWindow.java @@ -844,7 +844,14 @@ public class DisputeSummaryWindow extends Overlay { if (throwable == null) { try { refundManager.verifyTradeTxChain(txList); - doCloseIfValid(closeTicketButton); + + if (!dispute.isUsingLegacyBurningMan()) { + Transaction delayedPayoutTx = txList.get(3); + refundManager.verifyDelayedPayoutTxReceivers(delayedPayoutTx, dispute); + doCloseIfValid(closeTicketButton); + } else { + doCloseIfValid(closeTicketButton); + } } catch (Throwable error) { UserThread.runAfter(() -> new Popup().warning(Res.get("disputeSummaryWindow.delayedPayoutTxVerificationFailed", error.getMessage())) @@ -870,8 +877,10 @@ public class DisputeSummaryWindow extends Overlay { private void doCloseIfValid(Button closeTicketButton) { var disputeManager = checkNotNull(getDisputeManager(dispute)); try { - DisputeValidation.validateDonationAddressMatchesAnyPastParamValues(dispute, dispute.getDonationAddressOfDelayedPayoutTx(), daoFacade); DisputeValidation.testIfDisputeTriesReplay(dispute, disputeManager.getDisputesAsObservableList()); + if (dispute.isUsingLegacyBurningMan()) { + DisputeValidation.validateDonationAddressMatchesAnyPastParamValues(dispute, dispute.getDonationAddressOfDelayedPayoutTx(), daoFacade); + } doClose(closeTicketButton); } catch (DisputeValidation.AddressException exception) { String addressAsString = dispute.getDonationAddressOfDelayedPayoutTx(); diff --git a/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesDataModel.java b/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesDataModel.java index 69c0f5bfdd..6f6af705c6 100644 --- a/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesDataModel.java +++ b/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesDataModel.java @@ -568,6 +568,9 @@ public class PendingTradesDataModel extends ActivatableDataModel { dispute.setDelayedPayoutTxId(delayedPayoutTx.getTxId().toString()); } + dispute.setBurningManSelectionHeight(trade.getProcessModel().getBurningManSelectionHeight()); + dispute.setTradeTxFee(trade.getTradeTxFeeAsLong()); + trade.setDisputeState(Trade.DisputeState.MEDIATION_REQUESTED); sendOpenDisputeMessage(disputeManager, resultHandler, dispute); tradeManager.requestPersistence(); @@ -641,6 +644,9 @@ public class PendingTradesDataModel extends ActivatableDataModel { dispute.setDelayedPayoutTxId(delayedPayoutTx.getTxId().toString()); trade.setDisputeState(Trade.DisputeState.REFUND_REQUESTED); + dispute.setBurningManSelectionHeight(trade.getProcessModel().getBurningManSelectionHeight()); + dispute.setTradeTxFee(trade.getTradeTxFeeAsLong()); + ((DisputeProtocol) tradeManager.getTradeProtocol(trade)).onPublishDelayedPayoutTx(() -> { log.info("DelayedPayoutTx published and message sent to peer"); sendOpenDisputeMessage(disputeManager, resultHandler, dispute); diff --git a/proto/src/main/proto/pb.proto b/proto/src/main/proto/pb.proto index 686e6d94c2..3295491e9c 100644 --- a/proto/src/main/proto/pb.proto +++ b/proto/src/main/proto/pb.proto @@ -936,6 +936,8 @@ message Dispute { State state = 28; int64 trade_period_end = 29; map extra_data = 30; + int32 burning_man_selection_height = 31; // Added in v 1.9.7 + int64 trade_tx_fee = 32; // Added in v 1.9.7 } message Attachment { From 02a163f2f12da0ac6f024f3bca094e003fedaac6 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 3 Nov 2022 22:45:46 -0500 Subject: [PATCH 12/86] Fix handling of null entries in getBtcFeeReceiverAddress method Signed-off-by: HenrikJannsen --- .../dao/burningman/BurningManService.java | 8 +++++++- .../dao/burningman/BurningManServiceTest.java | 19 ++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index 5a762686d4..2e463435fd 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -477,16 +477,19 @@ public class BurningManService implements DaoStateListener { // that case. // effectiveBurnOutputShare is a % value represented as double. Smallest supported value is 0.01% -> 0.0001. // By multiplying it with 10000 and using Math.floor we limit the candidate to 0.01%. + // Entries with 0 will be ignored in the selection method. List burningManCandidates = new ArrayList<>(burningManCandidatesByName.values()); List amountList = burningManCandidates.stream() .map(BurningManCandidate::getEffectiveBurnOutputShare) .map(effectiveBurnOutputShare -> (long) Math.floor(effectiveBurnOutputShare * 10000)) - .filter(value -> value > 0) .collect(Collectors.toList()); if (amountList.isEmpty()) { return getBurningManAddressFromParam(currentChainHeight); } int winnerIndex = getRandomIndex(amountList, new Random()); + if (winnerIndex == -1) { + return getBurningManAddressFromParam(currentChainHeight); + } return burningManCandidates.get(winnerIndex).getMostRecentAddress() .orElse(getBurningManAddressFromParam(currentChainHeight)); } @@ -609,6 +612,9 @@ public class BurningManService implements DaoStateListener { @VisibleForTesting static int getRandomIndex(List weights, Random random) { long sum = weights.stream().mapToLong(n -> n).sum(); + if (sum == 0) { + return -1; + } long target = random.longs(0, sum).findFirst().orElseThrow() + 1; return findIndex(weights, target); } diff --git a/core/src/test/java/bisq/core/dao/burningman/BurningManServiceTest.java b/core/src/test/java/bisq/core/dao/burningman/BurningManServiceTest.java index 7659518828..8caab752d6 100644 --- a/core/src/test/java/bisq/core/dao/burningman/BurningManServiceTest.java +++ b/core/src/test/java/bisq/core/dao/burningman/BurningManServiceTest.java @@ -68,7 +68,6 @@ public class BurningManServiceTest { assertEquals(63, BurningManService.getDecayedAmount(amount, 1200, currentBlockHeight, genesisBlockHeight, 0.25)); assertEquals(88, BurningManService.getDecayedAmount(amount, 1200, currentBlockHeight, genesisBlockHeight, 0.75)); - assertEquals(100, BurningManService.getDecayedAmount(amount, 1000, currentBlockHeight, genesisBlockHeight, 1)); assertEquals(100, BurningManService.getDecayedAmount(amount, 1200, currentBlockHeight, genesisBlockHeight, 1)); assertEquals(100, BurningManService.getDecayedAmount(amount, 1400, currentBlockHeight, genesisBlockHeight, 1)); @@ -77,6 +76,13 @@ public class BurningManServiceTest { @Test public void testGetRandomIndex() { Random rnd = new Random(456); + assertEquals(4, BurningManService.getRandomIndex(Longs.asList(0, 0, 0, 3, 3), rnd)); + assertEquals(3, BurningManService.getRandomIndex(Longs.asList(0, 0, 0, 6, 0, 0, 0, 0, 0), rnd)); + + assertEquals(-1, BurningManService.getRandomIndex(Longs.asList(), rnd)); + assertEquals(-1, BurningManService.getRandomIndex(Longs.asList(0), rnd)); + assertEquals(-1, BurningManService.getRandomIndex(Longs.asList(0, 0), rnd)); + int[] selections = new int[3]; for (int i = 0; i < 6000; i++) { selections[BurningManService.getRandomIndex(Longs.asList(1, 2, 3), rnd)]++; @@ -100,5 +106,16 @@ public class BurningManServiceTest { // invalid values return index 0 assertEquals(0, BurningManService.findIndex(weights, 0)); assertEquals(0, BurningManService.findIndex(weights, 7)); + + assertEquals(0, BurningManService.findIndex(Longs.asList(0, 1, 2, 3), 0)); + assertEquals(0, BurningManService.findIndex(Longs.asList(1, 2, 3), 0)); + assertEquals(0, BurningManService.findIndex(Longs.asList(1, 2, 3), 1)); + assertEquals(1, BurningManService.findIndex(Longs.asList(0, 1, 2, 3), 1)); + assertEquals(2, BurningManService.findIndex(Longs.asList(0, 1, 2, 3), 2)); + assertEquals(1, BurningManService.findIndex(Longs.asList(0, 1, 0, 2, 3), 1)); + assertEquals(3, BurningManService.findIndex(Longs.asList(0, 1, 0, 2, 3), 2)); + assertEquals(3, BurningManService.findIndex(Longs.asList(0, 0, 0, 1, 2, 3), 1)); + assertEquals(4, BurningManService.findIndex(Longs.asList(0, 0, 0, 1, 2, 3), 2)); + assertEquals(6, BurningManService.findIndex(Longs.asList(0, 0, 0, 1, 0, 0, 2, 3), 2)); } } From fa857b39ecaa8645b02e325d8a9b632029de2485 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 3 Nov 2022 23:02:12 -0500 Subject: [PATCH 13/86] Make codacy happy Signed-off-by: HenrikJannsen --- .../desktop/main/dao/burnbsq/burningmen/BurningmenView.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java index 9f417bb458..6085f04288 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java @@ -267,7 +267,7 @@ public class BurningmenView extends ActivatableView implements selectedContributorBox.setVisible(false); // BurnOutputs - Tuple2, TitledGroupBg> burnOutputTuple = FormBuilder.addTableViewWithHeader(gridPane, ++gridRow, + Tuple2, TitledGroupBg> burnOutputTuple = addTableViewWithHeader(gridPane, ++gridRow, Res.get("dao.burningmen.burnOutput.table.header"), 30); burnOutputsTableView = burnOutputTuple.first; GridPane.setMargin(burnOutputsTableView, new Insets(60, 0, 5, -10)); @@ -281,7 +281,7 @@ public class BurningmenView extends ActivatableView implements burnOutputsTitledGroupBg.setManaged(false); // Compensations - Tuple2, TitledGroupBg> compensationTuple = FormBuilder.addTableViewWithHeader(gridPane, gridRow, + Tuple2, TitledGroupBg> compensationTuple = addTableViewWithHeader(gridPane, gridRow, Res.get("dao.burningmen.issuance.table.header"), 30); compensationTableView = compensationTuple.first; GridPane.setMargin(compensationTableView, new Insets(60, -10, 5, 0)); From 731363d128204c37c6f0de75a0bb0b770715bde1 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Fri, 4 Nov 2022 10:56:10 -0500 Subject: [PATCH 14/86] Sort getBtcFeeReceiverAddress by amount and address. Increase minOutputAmount to 1000 sat. Cleanups Signed-off-by: HenrikJannsen --- .../dao/burningman/BurningManCandidate.java | 17 +++----------- .../dao/burningman/BurningManService.java | 22 ++++++++++--------- .../bisq/core/support/dispute/Dispute.java | 2 +- .../support/dispute/DisputeValidation.java | 2 ++ .../trade/bisq_v1/TradeDataValidation.java | 3 ++- .../bisq/core/trade/model/bisq_v1/Trade.java | 5 +++-- .../burnbsq/burningmen/BurningmenView.java | 3 ++- .../dispute/agent/DisputeAgentView.java | 3 +-- 8 files changed, 26 insertions(+), 31 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java b/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java index e4eb682c6f..36476a7b4a 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java @@ -29,7 +29,7 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @Getter @EqualsAndHashCode -public final class BurningManCandidate implements Comparable { +public final class BurningManCandidate { private long accumulatedCompensationAmount; private long accumulatedDecayedCompensationAmount; private long accumulatedBurnAmount; @@ -39,7 +39,6 @@ public final class BurningManCandidate implements Comparable compensationModels = new ArrayList<>(); private final List burnOutputModels = new ArrayList<>(); @@ -92,21 +91,11 @@ public final class BurningManCandidate implements Comparable new ReadOnlyObjectWrapper<>(item.getValue())); column.getStyleClass().add("first-column"); column.setCellFactory(new Callback<>() { diff --git a/desktop/src/main/java/bisq/desktop/main/support/dispute/agent/DisputeAgentView.java b/desktop/src/main/java/bisq/desktop/main/support/dispute/agent/DisputeAgentView.java index ff5dca4fec..62217a98d2 100644 --- a/desktop/src/main/java/bisq/desktop/main/support/dispute/agent/DisputeAgentView.java +++ b/desktop/src/main/java/bisq/desktop/main/support/dispute/agent/DisputeAgentView.java @@ -151,9 +151,8 @@ public abstract class DisputeAgentView extends DisputeView implements MultipleHo } private String getValidationExceptionMessage(DisputeValidation.ValidationException exception) { - Dispute dispute = exception.getDispute(); if (exception instanceof DisputeValidation.AddressException) { - return getAddressExceptionMessage(dispute); + return getAddressExceptionMessage(exception.getDispute()); } else if (exception.getMessage() != null && !exception.getMessage().isEmpty()) { return exception.getMessage(); } else { From 58cabfaaf6622a54dffae1e25130b3a3498c92ae Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Fri, 4 Nov 2022 19:54:41 -0500 Subject: [PATCH 15/86] Add expectedRevenue to BurningManCandidate. Add getAverageDistributionPerCycle method to BurningManService. Show receiver address when BM is selected. Refactor code, cleanups, UI improvements. Signed-off-by: HenrikJannsen --- .../dao/burningman/BurningManCandidate.java | 9 +- .../dao/burningman/BurningManService.java | 251 ++++++++++++------ .../resources/i18n/displayStrings.properties | 16 +- .../burningmen/BurningmenListItem.java | 10 +- .../burnbsq/burningmen/BurningmenView.java | 239 +++++++++++------ .../burnbsq/proofofburn/ProofOfBurnView.java | 2 + 6 files changed, 356 insertions(+), 171 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java b/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java index 36476a7b4a..17136144b9 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java @@ -35,6 +35,7 @@ public final class BurningManCandidate { private long accumulatedBurnAmount; private long accumulatedDecayedBurnAmount; private long allowedBurnAmount; + private long expectedRevenue; private double issuanceShare; // share of accumulated decayed issuance amounts in relation to total issued amounts private double boostedIssuanceShare; private double burnOutputShare; // share of accumulated decayed burn amounts in relation to total burned amounts @@ -68,7 +69,10 @@ public final class BurningManCandidate { accumulatedCompensationAmount += compensationModel.getAmount(); } - public void calculateShare(double totalIssuanceWeight, double totalBurnOutputWeight, long burnTarget) { + public void calculateShare(double totalIssuanceWeight, + double totalBurnOutputWeight, + long burnTarget, + long averageDistributionPerCycle) { issuanceShare = totalIssuanceWeight > 0 ? accumulatedDecayedCompensationAmount / totalIssuanceWeight : 0; boostedIssuanceShare = issuanceShare * BurningManService.ISSUANCE_BOOST_FACTOR; @@ -83,6 +87,8 @@ public final class BurningManCandidate { } else { allowedBurnAmount = 0; } + + expectedRevenue = Math.round(averageDistributionPerCycle * effectiveBurnOutputShare); } public Optional getMostRecentAddress() { @@ -99,6 +105,7 @@ public final class BurningManCandidate { ",\r\n accumulatedBurnAmount=" + accumulatedBurnAmount + ",\r\n accumulatedDecayedBurnAmount=" + accumulatedDecayedBurnAmount + ",\r\n allowedBurnAmount=" + allowedBurnAmount + + ",\r\n expectedRevenue=" + expectedRevenue + ",\r\n issuanceShare=" + issuanceShare + ",\r\n boostedIssuanceShare=" + boostedIssuanceShare + ",\r\n burnOutputShare=" + burnOutputShare + diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index 5208119c72..f9596b6458 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -70,15 +70,65 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @Singleton public class BurningManService implements DaoStateListener { - public static final Date ACTIVATION_DATE = Utilities.getUTCDate(2022, GregorianCalendar.OCTOBER, 25); - private static final double GENESIS_OUTPUT_AMOUNT_FACTOR = 0.1; // Means amounts at genesis height gets reduced to 10% + // TODO + // public static final Date ACTIVATION_DATE = Utilities.getUTCDate(2022, GregorianCalendar.OCTOBER, 25); + public static final Date ACTIVATION_DATE = Utilities.getUTCDate(2023, GregorianCalendar.JANUARY, 1); + private static final int DAY_AS_BLOCKS = 144; + private static final int MONTH_AS_BLOCKS = 30 * DAY_AS_BLOCKS; // Ignore 31 days months, as the block time is anyway not exact. + private static final int YEAR_AS_BLOCKS = 12 * MONTH_AS_BLOCKS; + + // Parameters + // Cannot be changed after release as it would break trade protocol verification of DPT receivers. + + // Prefix for generic names for the genesis outputs. Appended with output index. + // Used as pre-image for burning. private static final String GENESIS_OUTPUT_PREFIX = "Bisq co-founder "; - private static final int MAX_COMP_REQUEST_AGE = 105120; // 2 years in blocks (2*365*144) // 312 for regtest with 2*12*13 (13 is block cycle) - private static final int MAX_BURN_AMOUNT_AGE = 52560; // 1 years in blocks (365*144) // 156 for regtest with 12*13 (13 is block cycle) - private static final int NUM_REIMBURSEMENT_CYCLES = 12; // We use reimbursements of the past 12 cycles - private static final long DEFAULT_EXPECTED_BTC_FEES = 6200000; // Average BTC trade fee revenue per month in BSQ value. Can be changed with DAO parameter voting - static final double ISSUANCE_BOOST_FACTOR = 2; // Contributor can burn 2 times the amount from their issuance share - static final long BURN_TARGET_BOOST_AMOUNT = 10000000; // Burn target gets increased by that amount to give more flexibility. + + // Factor for weighting the genesis output amounts. + private static final double GENESIS_OUTPUT_AMOUNT_FACTOR = 0.05; + + // The max. age in blocks for the decay function used for compensation request amounts. + private static final int MAX_COMP_REQUEST_AGE = 2 * YEAR_AS_BLOCKS; + + // The max. age in blocks for the decay function used for burned amounts. + private static final int MAX_BURN_AMOUNT_AGE = YEAR_AS_BLOCKS; + + // Number of cycles for accumulating reimbursement amounts. Used for the burn target. + private static final int NUM_REIMBURSEMENT_CYCLES = 12; + + // Default value for the estimated BTC trade fees per month as BSQ sat value (100 sat = 1 BSQ). + // Default is roughly average of last 12 months at Nov 2022. + // Can be changed with DAO parameter voting. + private static final long DEFAULT_ESTIMATED_BTC_FEES = 6200000; + + // Factor for boosting the issuance share (issuance is compensation requests + genesis output). + // This will be used for increasing the allowed burn amount. The factor gives more flexibility + // and compensates for those who do not burn. The burn share is capped by that factor as well. + // E.g. a contributor with 10% issuance share will be able to receive max 20% of the BTC fees or DPT output + // even if they would have burned more and had a higher burn share than 20%. + static final double ISSUANCE_BOOST_FACTOR = 2; + + // Burn target gets increased by that amount to give more flexibility. + // Burn target is calculated from reimbursements + estimated BTC fees - burned amounts. + static final long BURN_TARGET_BOOST_AMOUNT = 10000000; + + // One part of the limit for the min. amount to be included in the DPT outputs. + // The miner fee rate multiplied by 2 times the output size is the other factor. + // The higher one of both is used. 1000 sat is about 2 USD @ 20k price. + private static final long DPT_MIN_OUTPUT_AMOUNT = 1000; + + // If at DPT there is some leftover amount due to capping of some receivers (burn share is + // max. ISSUANCE_BOOST_FACTOR times the issuance share) we send it to legacy BM if it is larger + // than DPT_MIN_REMAINDER_TO_LEGACY_BM, otherwise we spend it as miner fee. + // 50000 sat is about 10 USD @ 20k price. We use a rather high value as we want to avoid that the legacy BM + // gets still payouts. + private static final long DPT_MIN_REMAINDER_TO_LEGACY_BM = 50000; + + // Min. fee rate for DPT. If fee rate used at take offer time was higher we use that. + // We prefer a rather high fee rate to not risk that the DPT gets stuck if required fee rate would + // spike when opening arbitration. + private static final long DPT_MIN_TX_FEE_RATE = 10; + public static boolean isActivated() { return new Date().after(ACTIVATION_DATE); @@ -156,35 +206,12 @@ public class BurningManService implements DaoStateListener { // Issuance compensationProposal.getBurningManReceiverAddress() .or(() -> daoStateService.getTx(compensationProposal.getTxId()) - .map(tx -> { - ImmutableList txOutputs = tx.getTxOutputs(); - // The compensation request tx has usually 4 outputs. If there is no BTC change its 3 outputs. - // BTC change output is at index 2 if present otherwise - // we use the BSQ address of the compensation candidate output at index 1. - // See https://docs.bisq.network/dao-technical-overview.html#compensation-request-txreimbursement-request-tx - if (txOutputs.size() == 4) { - return txOutputs.get(2).getAddress(); - } else { - return txOutputs.get(1).getAddress(); - } - })) + .map(this::getAddressFromCompensationRequest)) .ifPresent(address -> { int issuanceHeight = issuance.getChainHeight(); - long issuanceAmount; - - // There was a reimbursement for a conference sponsorship with 44776 BSQ. We remove that as well. - // See https://github.com/bisq-network/compensation/issues/498?utm_source=desktop-client&utm_medium=in-app-link&utm_campaign=language_en - boolean wasSponsorship = issuance.getTxId().equals("01455fc4c88fca0665a5f56a90ff03fb9e3e88c3430ffc5217246e32d180aa64"); - if (wasSponsorship) { - issuanceAmount = 119400; // That was the compensation part - } else { - issuanceAmount = issuance.getAmount(); - } + long issuanceAmount = getIssuanceAmountForCompensationRequest(issuance); int cycleIndex = getCycleIndex(issuanceHeight); - // Up to cycle 15 the RefundAgent made reimbursement requests as compensation requests. We filter out those entries. - // As it is mixed with RefundAgents real compensation requests we take out all above 3500 BSQ. - boolean isReimbursementOfRefundAgent = name.equals("RefundAgent") && cycleIndex <= 15 && issuanceAmount > 350000; - if (!isReimbursementOfRefundAgent) { + if (isValidReimbursement(name, cycleIndex, issuanceAmount)) { long decayedIssuanceAmount = getDecayedCompensationAmount(issuanceAmount, issuanceHeight, chainHeight); long issuanceDate = daoStateService.getBlockTime(issuanceHeight); candidate.addCompensationModel(new CompensationModel(address, @@ -233,10 +260,40 @@ public class BurningManService implements DaoStateListener { .sum(); long burnTarget = getBurnTarget(chainHeight, burningManCandidates); burningManCandidates.forEach(candidate -> - candidate.calculateShare(totalDecayedCompensationAmounts, totalDecayedBurnAmounts, burnTarget)); + candidate.calculateShare(totalDecayedCompensationAmounts, totalDecayedBurnAmounts, burnTarget, getAverageDistributionPerCycle())); return burningManCandidatesByName; } + private String getAddressFromCompensationRequest(Tx tx) { + ImmutableList txOutputs = tx.getTxOutputs(); + // The compensation request tx has usually 4 outputs. If there is no BTC change its 3 outputs. + // BTC change output is at index 2 if present otherwise + // we use the BSQ address of the compensation candidate output at index 1. + // See https://docs.bisq.network/dao-technical-overview.html#compensation-request-txreimbursement-request-tx + if (txOutputs.size() == 4) { + return txOutputs.get(2).getAddress(); + } else { + return txOutputs.get(1).getAddress(); + } + } + + private long getIssuanceAmountForCompensationRequest(Issuance issuance) { + // There was a reimbursement for a conference sponsorship with 44776 BSQ. We remove that as well. + // See https://github.com/bisq-network/compensation/issues/498 + if (issuance.getTxId().equals("01455fc4c88fca0665a5f56a90ff03fb9e3e88c3430ffc5217246e32d180aa64")) { + return 119400; // That was the compensation part + } else { + return issuance.getAmount(); + } + } + + private boolean isValidReimbursement(String name, int cycleIndex, long issuanceAmount) { + // Up to cycle 15 the RefundAgent made reimbursement requests as compensation requests. We filter out those entries. + // As it is mixed with RefundAgents real compensation requests we take out all above 3500 BSQ. + boolean isReimbursementOfRefundAgent = name.equals("RefundAgent") && cycleIndex <= 15 && issuanceAmount > 350000; + return !isReimbursementOfRefundAgent; + } + private Stream getCompensationProposalsForIssuance(Issuance issuance) { return proposalService.getProposalPayloads().stream() .map(ProposalPayload::getProposal) @@ -292,7 +349,7 @@ public class BurningManService implements DaoStateListener { /////////////////////////////////////////////////////////////////////////////////////////// - // Burn target + // Burn target, average distribution/cycle /////////////////////////////////////////////////////////////////////////////////////////// // Burn target using current chain height @@ -308,31 +365,44 @@ public class BurningManService implements DaoStateListener { // Burn target using given chain height. Can be historical state. public long getBurnTarget(int chainHeight, Collection burningManCandidates) { + int fromBlock = getFirstBlockOfPastCycle(chainHeight, NUM_REIMBURSEMENT_CYCLES); + long accumulatedReimbursements = getAccumulatedReimbursements(chainHeight, fromBlock); + long accumulatedEstimatedBtcTradeFees = getAccumulatedEstimatedBtcTradeFees(chainHeight, NUM_REIMBURSEMENT_CYCLES); + + // Legacy BurningMan + Set proofOfBurnTxs = getProofOfBurnTxs(chainHeight, fromBlock); + long burnedAmountFromLegacyBurningManDPT = getBurnedAmountFromLegacyBurningManDPT(proofOfBurnTxs); + long burnedAmountFromLegacyBurningMansBtcFees = getBurnedAmountFromLegacyBurningMansBtcFees(proofOfBurnTxs); + + // Distributed BurningMen + // burningManCandidates are already filtered with chainHeight + long burnedAmountFromBurningMen = getBurnedAmountFromBurningMen(burningManCandidates, fromBlock); + + return accumulatedReimbursements + + accumulatedEstimatedBtcTradeFees + - burnedAmountFromLegacyBurningManDPT + - burnedAmountFromLegacyBurningMansBtcFees + - burnedAmountFromBurningMen; + } + + public long getAverageDistributionPerCycle() { + int fromBlock = getFirstBlockOfPastCycle(currentChainHeight, 3); + long reimbursements = getAccumulatedReimbursements(currentChainHeight, fromBlock); + long btcTradeFees = getAccumulatedEstimatedBtcTradeFees(currentChainHeight, 3); + return Math.round((reimbursements + btcTradeFees) / 3d); + } + + private long getAccumulatedEstimatedBtcTradeFees(int chainHeight, int numCycles) { Optional optionalCycle = daoStateService.getCycle(chainHeight); if (optionalCycle.isEmpty()) { return 0; } - - Cycle currentCycle = optionalCycle.get(); - int firstBlockOfOldestCycle = daoStateService.getPastCycle(currentCycle, NUM_REIMBURSEMENT_CYCLES) - .map(Cycle::getHeightOfFirstBlock) - .orElse(daoStateService.getGenesisBlockHeight()); - - // Reimbursements - long accumulatedReimbursements = getReimbursements(chainHeight).stream() - .filter(reimbursementModel -> reimbursementModel.getHeight() >= firstBlockOfOldestCycle) - .mapToLong(ReimbursementModel::getAmount) - .sum(); - - // BTC fee revenue long accumulatedEstimatedBtcTradeFees = 0; - Cycle candidateCycle = currentCycle; - for (int i = 0; i < NUM_REIMBURSEMENT_CYCLES; i++) { + Cycle candidateCycle = optionalCycle.get(); + for (int i = 0; i < numCycles; i++) { // LOCK_TIME_TRADE_PAYOUT was never used. We re-purpose it as value for BTC fee revenue per cycle. This can be added as oracle data by DAO voting. // We cannot change the ParamType to BSQ as that would break consensus - long paramValueAsBlock = daoStateService.getParamValueAsBlock(Param.LOCK_TIME_TRADE_PAYOUT, candidateCycle.getHeightOfFirstBlock()); - // Ignore default value (4320) - long estimatedBtcTradeFeesPerCycle = paramValueAsBlock != 4320 ? paramValueAsBlock : DEFAULT_EXPECTED_BTC_FEES; + long estimatedBtcTradeFeesPerCycle = getBtcTradeFeeFromParam(candidateCycle); accumulatedEstimatedBtcTradeFees += estimatedBtcTradeFeesPerCycle; Optional previousCycle = daoStateService.getPreviousCycle(candidateCycle); if (previousCycle.isPresent()) { @@ -341,16 +411,40 @@ public class BurningManService implements DaoStateListener { break; } } + return accumulatedEstimatedBtcTradeFees; + } + private long getBtcTradeFeeFromParam(Cycle cycle) { + int value = daoStateService.getParamValueAsBlock(Param.LOCK_TIME_TRADE_PAYOUT, cycle.getHeightOfFirstBlock()); + // Ignore default value (4320) + return value != 4320 ? value : DEFAULT_ESTIMATED_BTC_FEES; + } + + private int getFirstBlockOfPastCycle(int chainHeight, int numPastCycles) { + Optional optionalCycle = daoStateService.getCycle(chainHeight); + if (optionalCycle.isEmpty()) { + return 0; + } + + Cycle currentCycle = optionalCycle.get(); + return daoStateService.getPastCycle(currentCycle, numPastCycles) + .map(Cycle::getHeightOfFirstBlock) + .orElse(daoStateService.getGenesisBlockHeight()); + } + + private Set getProofOfBurnTxs(int chainHeight, int fromBlock) { + return daoStateService.getProofOfBurnTxs().stream() + .filter(tx -> tx.getBlockHeight() <= chainHeight) + .filter(tx -> tx.getBlockHeight() >= fromBlock) + .collect(Collectors.toSet()); + } + + private long getBurnedAmountFromLegacyBurningManDPT(Set proofOfBurnTxs) { // Burningman // Legacy burningman use those opReturn data to mark their burn transactions from delayed payout transaction cases. // opReturn data from delayed payout txs when BM traded with the refund agent: 1701e47e5d8030f444c182b5e243871ebbaeadb5e82f // opReturn data from delayed payout txs when BM traded with traders who got reimbursed by the DAO: 1701293c488822f98e70e047012f46f5f1647f37deb7 - Set proofOfBurnTxs = daoStateService.getProofOfBurnTxs().stream() - .filter(tx -> tx.getBlockHeight() <= chainHeight) - .filter(tx -> tx.getBlockHeight() >= firstBlockOfOldestCycle) - .collect(Collectors.toSet()); - long burnedAmountFromLegacyBurningManDPT = proofOfBurnTxs.stream() + return proofOfBurnTxs.stream() .filter(e -> { String hash = Hex.encode(e.getLastTxOutput().getOpReturnData()); return "1701e47e5d8030f444c182b5e243871ebbaeadb5e82f".equals(hash) || @@ -358,29 +452,27 @@ public class BurningManService implements DaoStateListener { }) .mapToLong(Tx::getBurntBsq) .sum(); + } + private long getBurnedAmountFromLegacyBurningMansBtcFees(Set proofOfBurnTxs) { + // Burningman // Legacy burningman use those opReturn data to mark their burn transactions from delayed payout transaction cases. - // opReturn data from received BTC fees: 1701721206fe6b40777763de1c741f4fd2706d94775d - long burnedAmountFromLegacyBurningMansBtcFees = proofOfBurnTxs.stream() + // opReturn data from delayed payout txs when BM traded with the refund agent: 1701e47e5d8030f444c182b5e243871ebbaeadb5e82f + // opReturn data from delayed payout txs when BM traded with traders who got reimbursed by the DAO: 1701293c488822f98e70e047012f46f5f1647f37deb7 + return proofOfBurnTxs.stream() .filter(e -> "1701721206fe6b40777763de1c741f4fd2706d94775d".equals(Hex.encode(e.getLastTxOutput().getOpReturnData()))) .mapToLong(Tx::getBurntBsq) .sum(); + } - // Distributed BurningMen - // burningManCandidates are already filtered with chainHeight - long burnedAmountFromBurningMen = burningManCandidates.stream() + private long getBurnedAmountFromBurningMen(Collection burningManCandidates, int fromBlock) { + return burningManCandidates.stream() .map(burningManCandidate -> burningManCandidate.getBurnOutputModels().stream() - .filter(burnOutputModel -> burnOutputModel.getHeight() >= firstBlockOfOldestCycle) + .filter(burnOutputModel -> burnOutputModel.getHeight() >= fromBlock) .mapToLong(BurnOutputModel::getAmount) .sum()) .mapToLong(e -> e) .sum(); - - return accumulatedReimbursements - + accumulatedEstimatedBtcTradeFees - - burnedAmountFromLegacyBurningManDPT - - burnedAmountFromLegacyBurningMansBtcFees - - burnedAmountFromBurningMen; } @@ -415,11 +507,16 @@ public class BurningManService implements DaoStateListener { issuanceDate, cycleIndex)); })); - - return reimbursements; } + private long getAccumulatedReimbursements(int chainHeight, int fromBlock) { + return getReimbursements(chainHeight).stream() + .filter(reimbursementModel -> reimbursementModel.getHeight() >= fromBlock) + .mapToLong(ReimbursementModel::getAmount) + .sum(); + } + private Stream getReimbursementProposalsForIssuance(Issuance issuance) { return proposalService.getProposalPayloads().stream() .map(ProposalPayload::getProposal) @@ -528,11 +625,11 @@ public class BurningManService implements DaoStateListener { // Deposit tx has a clearly defined structure, so we know the size. It is only one optional output if range amount offer was taken. // Smallest tx size is 246. With additional change output we add 32. To be safe we use the largest expected size. double txSize = 278; - long txFeePerVbyte = Math.max(10, Math.round(tradeTxFee / txSize)); + long txFeePerVbyte = Math.max(DPT_MIN_TX_FEE_RATE, Math.round(tradeTxFee / txSize)); long spendableAmount = getSpendableAmount(burningManCandidates.size(), inputAmount, txFeePerVbyte); // We only use outputs > 1000 sat or at least 2 times the cost for the output (32 bytes). // If we remove outputs it will be spent as miner fee. - long minOutputAmount = Math.max(1000, txFeePerVbyte * 32 * 2); + long minOutputAmount = Math.max(DPT_MIN_OUTPUT_AMOUNT, txFeePerVbyte * 32 * 2); List> receivers = burningManCandidates.stream() .filter(candidate -> candidate.getMostRecentAddress().isPresent()) @@ -545,9 +642,9 @@ public class BurningManService implements DaoStateListener { long totalOutputValue = receivers.stream().mapToLong(e -> e.first).sum(); if (totalOutputValue < spendableAmount) { long available = spendableAmount - totalOutputValue; - // If the available is larger than 100000 sat (about 20 USD) we send it to legacy BM + // If the available is larger than DPT_MIN_REMAINDER_TO_LEGACY_BM we send it to legacy BM // Otherwise we use it as miner fee - if (available > 100000) { + if (available > DPT_MIN_REMAINDER_TO_LEGACY_BM) { receivers.add(new Tuple2<>(available, getLegacyBurningManAddress(burningManSelectionHeight))); } } diff --git a/core/src/main/resources/i18n/displayStrings.properties b/core/src/main/resources/i18n/displayStrings.properties index c90ef044e1..18e94cff5b 100644 --- a/core/src/main/resources/i18n/displayStrings.properties +++ b/core/src/main/resources/i18n/displayStrings.properties @@ -2097,7 +2097,6 @@ dao.param.ASSET_LISTING_FEE_PER_DAY=Asset listing fee per day dao.param.ASSET_MIN_VOLUME=Min. trade volume for assets # suppress inspection "UnusedProperty" -# dao.param.LOCK_TIME_TRADE_PAYOUT=Lock time for alternative trade payout tx ## Was never used and got re-purposed for expected BTC fee revenue per cycle dao.param.LOCK_TIME_TRADE_PAYOUT=BTC fee revenue / cycle as BSQ Satoshi value # suppress inspection "UnusedProperty" @@ -2285,23 +2284,22 @@ dao.burningmen.amount.prompt=Amount to burn dao.burningmen.amount.prompt.max=Amount to burn (max.: {0}) dao.burningmen.candidates.table.header=Burningmen candidates dao.burningmen.burnOutput.table.header=Burn outputs +dao.burningmen.compensations.table.header=Compensations dao.burningmen.reimbursement.table.header=Reimbursement requests -dao.burningmen.issuance.table.header=Issuances -dao.burningmen.currentBlockHeight=Current block height +dao.burningmen.expectedRevenue=Past 3-month average distribution dao.burningmen.burnTarget=Amount of BSQ to burn for off-setting reimbursements and BTC trade fees -dao.burningmen.localCoFounderNames=My co-founder name(s) dao.burningmen.filter=Filter burningman candidates dao.burningmen.toggle=Show only active burningmen -dao.burningmen.preImage=Contributor name (pre-image) dao.burningmen.contributorsComboBox.prompt=Select any of my contributors - dao.burningmen.selectedContributor=Selected contributor -dao.burningmen.selectedContributor.label=Contributor name +dao.burningmen.selectedContributorName=Contributor name +dao.burningmen.selectedContributorAddress=Receiver address dao.burningmen.table.name=Contributor name +dao.burningmen.table.allowedBurnAmount=Allowed to burn +dao.burningmen.table.expectedRevenue=Expected to receive dao.burningmen.table.burnAmount=Burned amount -dao.burningmen.table.allowedBurnAmount=Allowed amount to burn dao.burningmen.table.decayedBurnAmount=Decayed burned amount -dao.burningmen.table.burnOutputShare=Receiver share +dao.burningmen.table.effectiveBurnOutputShare=Receiver share dao.burningmen.table.numBurnOutputs=Num. Burns dao.burningmen.table.issuanceAmount=Issued amount dao.burningmen.table.decayedIssuanceAmount=Decayed issued amount diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java index de2a73d275..11fba3ba9b 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java @@ -18,6 +18,7 @@ package bisq.desktop.main.dao.burnbsq.burningmen; import bisq.core.dao.burningman.BurningManCandidate; +import bisq.core.locale.Res; import bisq.core.util.FormattingUtils; import bisq.core.util.coin.BsqFormatter; @@ -28,11 +29,11 @@ import lombok.Getter; @EqualsAndHashCode class BurningmenListItem { private final BurningManCandidate burningManCandidate; - private final String name, burnOutputShareAsString, effectiveBurnOutputShareAsString, issuanceShareAsString, + private final String name, address, burnOutputShareAsString, effectiveBurnOutputShareAsString, issuanceShareAsString, accumulatedDecayedBurnAmountAsBsq, allowedBurnAmountAsBsq, accumulatedBurnAmountAsBsq, - accumulatedDecayedCompensationAmountAsBsq, accumulatedCompensationAmountAsBsq; + accumulatedDecayedCompensationAmountAsBsq, accumulatedCompensationAmountAsBsq, expectedRevenueAsBsq; private final long allowedBurnAmount, accumulatedDecayedBurnAmount, accumulatedBurnAmount, - accumulatedDecayedCompensationAmount, accumulatedCompensationAmount; + accumulatedDecayedCompensationAmount, accumulatedCompensationAmount, expectedRevenue; private final int numBurnOutputs, numIssuances; private final double burnOutputShare, effectiveBurnOutputShare, issuanceShare; @@ -40,6 +41,7 @@ class BurningmenListItem { this.burningManCandidate = burningManCandidate; this.name = name; + address = burningManCandidate.getMostRecentAddress().orElse(Res.get("shared.na")); // Burn allowedBurnAmount = burningManCandidate.getAllowedBurnAmount(); @@ -52,6 +54,8 @@ class BurningmenListItem { burnOutputShareAsString = FormattingUtils.formatToPercentWithSymbol(burnOutputShare); effectiveBurnOutputShare = burningManCandidate.getEffectiveBurnOutputShare(); effectiveBurnOutputShareAsString = FormattingUtils.formatToPercentWithSymbol(effectiveBurnOutputShare); + expectedRevenue = burningManCandidate.getExpectedRevenue(); + expectedRevenueAsBsq = bsqFormatter.formatCoinWithCode(expectedRevenue); numBurnOutputs = burningManCandidate.getBurnOutputModels().size(); // Issuance diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java index 68329b7600..a89d99ce3a 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java @@ -98,14 +98,14 @@ public class BurningmenView extends ActivatableView implements private InputTextField amountInputTextField, burningmenFilterField; private ComboBox contributorComboBox; private Button burnButton; - private TitledGroupBg burnOutputsTitledGroupBg, compensationTitledGroupBg, selectedContributorTitledGroupBg; + private TitledGroupBg burnOutputsTitledGroupBg, compensationsTitledGroupBg, selectedContributorTitledGroupBg; private AutoTooltipSlideToggleButton showOnlyActiveBurningmenToggle; - private TextField currentBlockHeightField, selectedContributorField, burnTargetField; - private VBox selectedContributorBox; + private TextField expectedRevenueField, selectedContributorNameField, selectedContributorAddressField, burnTargetField; + private VBox selectedContributorNameBox, selectedContributorAddressBox; private TableView burningmenTableView; private TableView burnOutputsTableView; - private TableView compensationTableView; - private TableView reimbursementTableView; + private TableView compensationsTableView; + private TableView reimbursementsTableView; private final ObservableList burningmenObservableList = FXCollections.observableArrayList(); private final FilteredList burningmenFilteredList = new FilteredList<>(burningmenObservableList); @@ -160,18 +160,21 @@ public class BurningmenView extends ActivatableView implements burnOutputsTableView.setManaged(isValueSet); burnOutputsTitledGroupBg.setVisible(isValueSet); burnOutputsTitledGroupBg.setManaged(isValueSet); - compensationTableView.setVisible(isValueSet); - compensationTableView.setManaged(isValueSet); - compensationTitledGroupBg.setVisible(isValueSet); - compensationTitledGroupBg.setManaged(isValueSet); + compensationsTableView.setVisible(isValueSet); + compensationsTableView.setManaged(isValueSet); + compensationsTitledGroupBg.setVisible(isValueSet); + compensationsTitledGroupBg.setManaged(isValueSet); selectedContributorTitledGroupBg.setManaged(isValueSet); selectedContributorTitledGroupBg.setVisible(isValueSet); - selectedContributorBox.setManaged(isValueSet); - selectedContributorBox.setVisible(isValueSet); + selectedContributorNameBox.setManaged(isValueSet); + selectedContributorNameBox.setVisible(isValueSet); + selectedContributorAddressBox.setManaged(isValueSet); + selectedContributorAddressBox.setVisible(isValueSet); if (isValueSet) { onBurningManSelected(newValue); } else { - selectedContributorField.clear(); + selectedContributorNameField.clear(); + selectedContributorAddressField.clear(); } }; @@ -180,8 +183,8 @@ public class BurningmenView extends ActivatableView implements contributorsListener = (observable, oldValue, newValue) -> { if (newValue != null) { bsqValidator.setMaxValue(Coin.valueOf(newValue.getAllowedBurnAmount())); + amountInputTextField.clear(); amountInputTextField.resetValidation(); - burnAmountValidator.validate(amountInputTextField.getText()); amountInputTextField.setPromptText(Res.get("dao.burningmen.amount.prompt.max", bsqFormatter.formatCoinWithCode(newValue.getAllowedBurnAmount()))); updateButtonState(); @@ -216,8 +219,8 @@ public class BurningmenView extends ActivatableView implements burnTargetField = addCompactTopLabelTextField(gridPane, ++gridRow, Res.get("dao.burningmen.burnTarget"), "", Layout.FLOATING_LABEL_DISTANCE).second; Tuple3 currentBlockHeightTuple = addCompactTopLabelTextField(gridPane, gridRow, - Res.get("dao.burningmen.currentBlockHeight"), "", Layout.FLOATING_LABEL_DISTANCE); - currentBlockHeightField = currentBlockHeightTuple.second; + Res.get("dao.burningmen.expectedRevenue"), "", Layout.FLOATING_LABEL_DISTANCE); + expectedRevenueField = currentBlockHeightTuple.second; GridPane.setColumnIndex(currentBlockHeightTuple.third, 1); // Burn inputs @@ -247,8 +250,8 @@ public class BurningmenView extends ActivatableView implements burningmenFilterField = burningmenTuple.first; burningmenTableView = burningmenTuple.second; GridPane.setColumnSpan(burningmenTableView, 2); - burningmenTableView.setItems(burningmenSortedList); createBurningmenColumns(); + burningmenTableView.setItems(burningmenSortedList); HBox hBox = burningmenTuple.third; GridPane.setColumnSpan(hBox, 2); showOnlyActiveBurningmenToggle = new AutoTooltipSlideToggleButton(); @@ -257,22 +260,33 @@ public class BurningmenView extends ActivatableView implements hBox.getChildren().add(2, showOnlyActiveBurningmenToggle); // Selected contributor - selectedContributorTitledGroupBg = addTitledGroupBg(gridPane, ++gridRow, 2, Res.get("dao.burningmen.selectedContributor"), Layout.COMPACT_GROUP_DISTANCE); + selectedContributorTitledGroupBg = addTitledGroupBg(gridPane, ++gridRow, 3, + Res.get("dao.burningmen.selectedContributor"), Layout.COMPACT_GROUP_DISTANCE); selectedContributorTitledGroupBg.setManaged(false); selectedContributorTitledGroupBg.setVisible(false); - Tuple3 tuple = addCompactTopLabelTextField(gridPane, ++gridRow, Res.get("dao.burningmen.selectedContributor.label"), "", Layout.COMPACT_GROUP_DISTANCE + Layout.FLOATING_LABEL_DISTANCE); - selectedContributorField = tuple.second; - selectedContributorBox = tuple.third; - GridPane.setColumnSpan(selectedContributorBox, 2); - selectedContributorBox.setManaged(false); - selectedContributorBox.setVisible(false); + Tuple3 nameTuple = addCompactTopLabelTextField(gridPane, ++gridRow, + Res.get("dao.burningmen.selectedContributorName"), "", + Layout.COMPACT_GROUP_DISTANCE + Layout.FLOATING_LABEL_DISTANCE); + selectedContributorNameField = nameTuple.second; + selectedContributorNameBox = nameTuple.third; + selectedContributorNameBox.setManaged(false); + selectedContributorNameBox.setVisible(false); + + Tuple3 addressTuple = addCompactTopLabelTextField(gridPane, gridRow, + Res.get("dao.burningmen.selectedContributorAddress"), "", + Layout.COMPACT_GROUP_DISTANCE + Layout.FLOATING_LABEL_DISTANCE); + selectedContributorAddressField = addressTuple.second; + selectedContributorAddressBox = addressTuple.third; + GridPane.setColumnSpan(selectedContributorAddressBox, 2); + GridPane.setColumnIndex(selectedContributorAddressBox, 1); + selectedContributorAddressBox.setManaged(false); + selectedContributorAddressBox.setVisible(false); // BurnOutputs Tuple2, TitledGroupBg> burnOutputTuple = addTableViewWithHeader(gridPane, ++gridRow, Res.get("dao.burningmen.burnOutput.table.header"), 30); burnOutputsTableView = burnOutputTuple.first; GridPane.setMargin(burnOutputsTableView, new Insets(60, 0, 5, -10)); - burnOutputsTableView.setPrefHeight(50); createBurnOutputsColumns(); burnOutputsTableView.setItems(burnOutputsSortedList); burnOutputsTableView.setVisible(false); @@ -283,30 +297,32 @@ public class BurningmenView extends ActivatableView implements // Compensations Tuple2, TitledGroupBg> compensationTuple = addTableViewWithHeader(gridPane, gridRow, - Res.get("dao.burningmen.issuance.table.header"), 30); - compensationTableView = compensationTuple.first; - GridPane.setMargin(compensationTableView, new Insets(60, -10, 5, 0)); - GridPane.setColumnIndex(compensationTableView, 1); - compensationTableView.setPrefHeight(50); + Res.get("dao.burningmen.compensations.table.header"), 30); + compensationsTableView = compensationTuple.first; + GridPane.setMargin(compensationsTableView, new Insets(60, -10, 5, 0)); + GridPane.setColumnIndex(compensationsTableView, 1); createCompensationColumns(); - compensationTableView.setItems(compensationSortedList); - compensationTableView.setVisible(false); - compensationTableView.setManaged(false); - compensationTitledGroupBg = compensationTuple.second; - GridPane.setColumnIndex(compensationTitledGroupBg, 1); - compensationTitledGroupBg.setVisible(false); - compensationTitledGroupBg.setManaged(false); + compensationsTableView.setItems(compensationSortedList); + compensationsTableView.setVisible(false); + compensationsTableView.setManaged(false); + compensationsTitledGroupBg = compensationTuple.second; + GridPane.setColumnIndex(compensationsTitledGroupBg, 1); + compensationsTitledGroupBg.setVisible(false); + compensationsTitledGroupBg.setManaged(false); // Reimbursements - reimbursementTableView = FormBuilder.addTableViewWithHeader(gridPane, ++gridRow, + reimbursementsTableView = FormBuilder.addTableViewWithHeader(gridPane, ++gridRow, Res.get("dao.burningmen.reimbursement.table.header"), 30).first; - GridPane.setColumnSpan(reimbursementTableView, 2); + GridPane.setColumnSpan(reimbursementsTableView, 2); createReimbursementColumns(); - reimbursementTableView.setItems(reimbursementSortedList); + reimbursementsTableView.setItems(reimbursementSortedList); } @Override protected void activate() { + GUIUtil.setFitToRowsForTableView(burningmenTableView, 36, 28, 15, 30); + GUIUtil.setFitToRowsForTableView(reimbursementsTableView, 36, 28, 3, 6); + daoFacade.addBsqStateListener(this); amountInputTextField.textProperty().addListener(amountInputTextFieldListener); @@ -319,8 +335,8 @@ public class BurningmenView extends ActivatableView implements burningmenSortedList.comparatorProperty().bind(burningmenTableView.comparatorProperty()); burnOutputsSortedList.comparatorProperty().bind(burnOutputsTableView.comparatorProperty()); - compensationSortedList.comparatorProperty().bind(compensationTableView.comparatorProperty()); - reimbursementSortedList.comparatorProperty().bind(reimbursementTableView.comparatorProperty()); + compensationSortedList.comparatorProperty().bind(compensationsTableView.comparatorProperty()); + reimbursementSortedList.comparatorProperty().bind(reimbursementsTableView.comparatorProperty()); burnButton.setOnAction((event) -> { BurningmenListItem selectedItem = contributorComboBox.getSelectionModel().getSelectedItem(); @@ -401,7 +417,7 @@ public class BurningmenView extends ActivatableView implements .map(reimbursementModel -> new ReimbursementListItem(reimbursementModel, bsqFormatter)) .collect(Collectors.toList())); - currentBlockHeightField.setText(String.valueOf(daoFacade.getChainHeight())); + expectedRevenueField.setText(bsqFormatter.formatCoinWithCode(burningManService.getAverageDistributionPerCycle())); burnTargetField.setText(bsqFormatter.formatCoinWithCode(burningManService.getCurrentBurnTarget())); if (daoFacade.isParseBlockChainComplete()) { @@ -433,7 +449,8 @@ public class BurningmenView extends ActivatableView implements } private void onBurningManSelected(BurningmenListItem burningmenListItem) { - selectedContributorField.setText(burningmenListItem.getName()); + selectedContributorNameField.setText(burningmenListItem.getName()); + selectedContributorAddressField.setText(burningmenListItem.getAddress()); burnOutputsObservableList.setAll(burningmenListItem.getBurningManCandidate().getBurnOutputModels().stream() .map(burnOutputModel -> new BurnOutputListItem(burnOutputModel, bsqFormatter)) .collect(Collectors.toList())); @@ -441,7 +458,7 @@ public class BurningmenView extends ActivatableView implements compensationObservableList.setAll(burningmenListItem.getBurningManCandidate().getCompensationModels().stream() .map(compensationModel -> new CompensationListItem(compensationModel, bsqFormatter)) .collect(Collectors.toList())); - GUIUtil.setFitToRowsForTableView(compensationTableView, 36, 28, 4, 6); + GUIUtil.setFitToRowsForTableView(compensationsTableView, 36, 28, 4, 6); } private void updateButtonState() { @@ -463,6 +480,9 @@ public class BurningmenView extends ActivatableView implements errorMessage -> new Popup().warning(errorMessage).show()); amountInputTextField.clear(); + amountInputTextField.setPromptText(Res.get("dao.burningmen.amount.prompt")); + amountInputTextField.resetValidation(); + contributorComboBox.getSelectionModel().clearSelection(); } @@ -474,7 +494,7 @@ public class BurningmenView extends ActivatableView implements TableColumn column; column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.name")); - column.setMinWidth(120); + column.setMinWidth(140); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.getStyleClass().add("first-column"); column.setCellFactory(new Callback<>() { @@ -498,7 +518,8 @@ public class BurningmenView extends ActivatableView implements column.setComparator(Comparator.comparing(e -> e.getName().toLowerCase())); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.allowedBurnAmount")); - column.setMinWidth(80); + column.setMinWidth(110); + column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override @@ -519,9 +540,34 @@ public class BurningmenView extends ActivatableView implements burningmenTableView.getColumns().add(column); column.setComparator(Comparator.comparing(BurningmenListItem::getAllowedBurnAmount)); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.burnOutputShare")); - column.setMinWidth(100); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.expectedRevenue")); + column.setMinWidth(140); + column.getStyleClass().add("last-column"); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BurningmenListItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(item.getExpectedRevenueAsBsq()); + } else + setText(""); + } + }; + } + }); + burningmenTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurningmenListItem::getExpectedRevenue)); + column.setSortType(TableColumn.SortType.DESCENDING); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.effectiveBurnOutputShare")); + column.setMinWidth(110); column.setMaxWidth(column.getMinWidth()); + column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override @@ -545,7 +591,8 @@ public class BurningmenView extends ActivatableView implements burningmenTableView.getSortOrder().add(column); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.decayedBurnAmount")); - column.setMinWidth(80); + column.setMinWidth(160); + column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override @@ -565,9 +612,11 @@ public class BurningmenView extends ActivatableView implements }); burningmenTableView.getColumns().add(column); column.setComparator(Comparator.comparing(BurningmenListItem::getAccumulatedDecayedBurnAmount)); + column.setSortType(TableColumn.SortType.DESCENDING); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.burnAmount")); - column.setMinWidth(80); + column.setMinWidth(110); + column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override @@ -587,10 +636,12 @@ public class BurningmenView extends ActivatableView implements }); burningmenTableView.getColumns().add(column); column.setComparator(Comparator.comparing(BurningmenListItem::getAccumulatedBurnAmount)); + column.setSortType(TableColumn.SortType.DESCENDING); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.numBurnOutputs")); - column.setMinWidth(100); + column.setMinWidth(90); column.setMaxWidth(column.getMinWidth()); + column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override @@ -610,9 +661,11 @@ public class BurningmenView extends ActivatableView implements }); burningmenTableView.getColumns().add(column); column.setComparator(Comparator.comparing(BurningmenListItem::getNumBurnOutputs)); + column.setSortType(TableColumn.SortType.DESCENDING); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.issuanceShare")); - column.setMinWidth(100); + column.setMinWidth(110); + column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override @@ -632,9 +685,11 @@ public class BurningmenView extends ActivatableView implements }); burningmenTableView.getColumns().add(column); column.setComparator(Comparator.comparing(BurningmenListItem::getIssuanceShare)); + column.setSortType(TableColumn.SortType.DESCENDING); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.decayedIssuanceAmount")); - column.setMinWidth(80); + column.setMinWidth(140); + column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override @@ -654,9 +709,11 @@ public class BurningmenView extends ActivatableView implements }); burningmenTableView.getColumns().add(column); column.setComparator(Comparator.comparing(BurningmenListItem::getAccumulatedDecayedCompensationAmount)); + column.setSortType(TableColumn.SortType.DESCENDING); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.issuanceAmount")); - column.setMinWidth(80); + column.setMinWidth(120); + column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override @@ -676,9 +733,10 @@ public class BurningmenView extends ActivatableView implements }); burningmenTableView.getColumns().add(column); column.setComparator(Comparator.comparing(BurningmenListItem::getAccumulatedCompensationAmount)); + column.setSortType(TableColumn.SortType.DESCENDING); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.numIssuances")); - column.setMinWidth(100); + column.setMinWidth(110); column.setMaxWidth(column.getMinWidth()); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); @@ -700,13 +758,14 @@ public class BurningmenView extends ActivatableView implements }); burningmenTableView.getColumns().add(column); column.setComparator(Comparator.comparing(BurningmenListItem::getNumIssuances)); + column.setSortType(TableColumn.SortType.DESCENDING); } private void createBurnOutputsColumns() { TableColumn column; column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.date")); - column.setMinWidth(80); + column.setMinWidth(160); column.getStyleClass().add("first-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @@ -732,8 +791,9 @@ public class BurningmenView extends ActivatableView implements burnOutputsTableView.getSortOrder().add(column); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.cycle")); - column.setMinWidth(50); + column.setMinWidth(60); column.setMaxWidth(column.getMinWidth()); + column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override @@ -753,10 +813,12 @@ public class BurningmenView extends ActivatableView implements }); burnOutputsTableView.getColumns().add(column); column.setComparator(Comparator.comparing(BurnOutputListItem::getCycleIndex)); + column.setSortType(TableColumn.SortType.DESCENDING); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.height")); - column.setMinWidth(100); + column.setMinWidth(90); column.setMaxWidth(column.getMinWidth()); + column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override @@ -776,9 +838,11 @@ public class BurningmenView extends ActivatableView implements }); burnOutputsTableView.getColumns().add(column); column.setComparator(Comparator.comparing(BurnOutputListItem::getHeight)); + column.setSortType(TableColumn.SortType.DESCENDING); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.decayedBurnAmount")); - column.setMinWidth(80); + column.setMinWidth(160); + column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override @@ -798,9 +862,10 @@ public class BurningmenView extends ActivatableView implements }); burnOutputsTableView.getColumns().add(column); column.setComparator(Comparator.comparing(BurnOutputListItem::getDecayedAmount)); + column.setSortType(TableColumn.SortType.DESCENDING); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.burnAmount")); - column.setMinWidth(80); + column.setMinWidth(140); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @@ -821,13 +886,14 @@ public class BurningmenView extends ActivatableView implements }); burnOutputsTableView.getColumns().add(column); column.setComparator(Comparator.comparing(BurnOutputListItem::getAmount)); + column.setSortType(TableColumn.SortType.DESCENDING); } private void createCompensationColumns() { TableColumn column; column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.date")); - column.setMinWidth(80); + column.setMinWidth(160); column.getStyleClass().add("first-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); @@ -848,14 +914,15 @@ public class BurningmenView extends ActivatableView implements }; } }); - compensationTableView.getColumns().add(column); + compensationsTableView.getColumns().add(column); column.setSortType(TableColumn.SortType.DESCENDING); column.setComparator(Comparator.comparing(CompensationListItem::getDate)); - compensationTableView.getSortOrder().add(column); + compensationsTableView.getSortOrder().add(column); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.cycle")); - column.setMinWidth(50); + column.setMinWidth(60); column.setMaxWidth(column.getMinWidth()); + column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override @@ -873,12 +940,14 @@ public class BurningmenView extends ActivatableView implements }; } }); - compensationTableView.getColumns().add(column); + compensationsTableView.getColumns().add(column); column.setComparator(Comparator.comparing(CompensationListItem::getCycleIndex)); + column.setSortType(TableColumn.SortType.DESCENDING); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.height")); - column.setMinWidth(100); + column.setMinWidth(90); column.setMaxWidth(column.getMinWidth()); + column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override @@ -896,11 +965,13 @@ public class BurningmenView extends ActivatableView implements }; } }); - compensationTableView.getColumns().add(column); + compensationsTableView.getColumns().add(column); column.setComparator(Comparator.comparing(CompensationListItem::getHeight)); + column.setSortType(TableColumn.SortType.DESCENDING); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.decayedIssuanceAmount")); - column.setMinWidth(80); + column.setMinWidth(160); + column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @@ -919,11 +990,12 @@ public class BurningmenView extends ActivatableView implements }; } }); - compensationTableView.getColumns().add(column); + compensationsTableView.getColumns().add(column); column.setComparator(Comparator.comparing(CompensationListItem::getDecayedAmount)); + column.setSortType(TableColumn.SortType.DESCENDING); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.issuanceAmount")); - column.setMinWidth(80); + column.setMinWidth(140); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @@ -942,16 +1014,16 @@ public class BurningmenView extends ActivatableView implements }; } }); - compensationTableView.getColumns().add(column); + compensationsTableView.getColumns().add(column); column.setComparator(Comparator.comparing(CompensationListItem::getAmount)); + column.setSortType(TableColumn.SortType.DESCENDING); } - private void createReimbursementColumns() { TableColumn column; column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.date")); - column.setMinWidth(80); + column.setMinWidth(160); column.getStyleClass().add("first-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @@ -971,13 +1043,14 @@ public class BurningmenView extends ActivatableView implements }; } }); - reimbursementTableView.getColumns().add(column); + reimbursementsTableView.getColumns().add(column); column.setSortType(TableColumn.SortType.DESCENDING); column.setComparator(Comparator.comparing(ReimbursementListItem::getDate)); - reimbursementTableView.getSortOrder().add(column); + reimbursementsTableView.getSortOrder().add(column); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.height")); - column.setMinWidth(100); + column.setMinWidth(90); + column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override @@ -995,11 +1068,13 @@ public class BurningmenView extends ActivatableView implements }; } }); - reimbursementTableView.getColumns().add(column); + reimbursementsTableView.getColumns().add(column); column.setComparator(Comparator.comparing(ReimbursementListItem::getHeight)); + column.setSortType(TableColumn.SortType.DESCENDING); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.cycle")); - column.setMinWidth(50); + column.setMinWidth(60); + column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override @@ -1017,11 +1092,12 @@ public class BurningmenView extends ActivatableView implements }; } }); - reimbursementTableView.getColumns().add(column); + reimbursementsTableView.getColumns().add(column); column.setComparator(Comparator.comparing(ReimbursementListItem::getCycleIndex)); + column.setSortType(TableColumn.SortType.DESCENDING); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.reimbursedAmount")); - column.setMinWidth(80); + column.setMinWidth(140); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @@ -1040,7 +1116,8 @@ public class BurningmenView extends ActivatableView implements }; } }); - reimbursementTableView.getColumns().add(column); + reimbursementsTableView.getColumns().add(column); column.setComparator(Comparator.comparing(ReimbursementListItem::getAmount)); + column.setSortType(TableColumn.SortType.DESCENDING); } } diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/proofofburn/ProofOfBurnView.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/proofofburn/ProofOfBurnView.java index daeb37907d..dc506d2538 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/proofofburn/ProofOfBurnView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/proofofburn/ProofOfBurnView.java @@ -297,6 +297,8 @@ public class ProofOfBurnView extends ActivatableView implements amountInputTextField.clear(); preImageTextField.clear(); + amountInputTextField.resetValidation(); + preImageTextField.resetValidation(); } From 7407ab87f96483882fdfe0678ea465b689739dcc Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Sat, 5 Nov 2022 12:57:31 -0500 Subject: [PATCH 16/86] Subtract accumulatedDecayedBurnAmount from allowedBurnAmount Signed-off-by: HenrikJannsen --- .../main/java/bisq/core/dao/burningman/BurningManCandidate.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java b/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java index 17136144b9..76931829c3 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java @@ -82,6 +82,8 @@ public final class BurningManCandidate { double maxBurnAmount = burnTarget + BurningManService.BURN_TARGET_BOOST_AMOUNT; if (issuanceShare > 0 && maxBurnAmount > 0 && effectiveBurnOutputShare < boostedIssuanceShare) { long value = Math.round(boostedIssuanceShare * maxBurnAmount); + // We reduce it with what he had already burned + value -= accumulatedDecayedBurnAmount; // If below dust we set value to 0 allowedBurnAmount = value < 546 ? 0 : value; } else { From 19067acbcdefed15bb8e1f0b81386d87f347ebbd Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Sun, 6 Nov 2022 10:57:44 -0500 Subject: [PATCH 17/86] Cleanup Signed-off-by: HenrikJannsen --- .../java/bisq/core/dao/burningman/BurningManCandidate.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java b/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java index 76931829c3..45fd5c0895 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java @@ -81,9 +81,8 @@ public final class BurningManCandidate { double maxBurnAmount = burnTarget + BurningManService.BURN_TARGET_BOOST_AMOUNT; if (issuanceShare > 0 && maxBurnAmount > 0 && effectiveBurnOutputShare < boostedIssuanceShare) { - long value = Math.round(boostedIssuanceShare * maxBurnAmount); // We reduce it with what he had already burned - value -= accumulatedDecayedBurnAmount; + long value = Math.round(boostedIssuanceShare * maxBurnAmount) - accumulatedDecayedBurnAmount; // If below dust we set value to 0 allowedBurnAmount = value < 546 ? 0 : value; } else { From 559ba6e9b9502dde863e9a6070306639bcb921e8 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Sun, 6 Nov 2022 12:44:32 -0500 Subject: [PATCH 18/86] Refactor BurningManService Split up into 4 service classes - BurningManService: Common stuff - BurningManInfoService: For displaying BurningMan data - BtcFeeReceiverService: For getting btcFeeReceivers - DelayedPayoutTxReceiverService: For getting delayedPayoutTxReceivers. This is the critical part where we need to have a deterministic data and which could break trade consensus. WIP refactoring. More to come... Signed-off-by: HenrikJannsen --- .../dao/burningman/BtcFeeReceiverService.java | 117 ++++++++ .../dao/burningman/BurningManInfoService.java | 159 ++++++++++ .../dao/burningman/BurningManService.java | 282 ++---------------- .../core/dao/burningman/BurningManUtil.java | 32 ++ .../DelayedPayoutTxReceiverService.java | 155 ++++++++++ .../bisq/core/offer/OpenOfferManager.java | 2 +- .../tasks/SendOfferAvailabilityRequest.java | 2 +- .../bisq_v1/tasks/CreateMakerFeeTx.java | 2 +- .../support/dispute/refund/RefundManager.java | 2 +- .../BuyerVerifiesFinalDelayedPayoutTx.java | 2 +- .../BuyerVerifiesPreparedDelayedPayoutTx.java | 2 +- ...kerProcessesInputsForDepositTxRequest.java | 2 +- .../seller/SellerCreatesDelayedPayoutTx.java | 2 +- .../bisq_v1/tasks/taker/CreateTakerFeeTx.java | 2 +- .../TakerSendInputsForDepositTxRequest.java | 2 +- .../burningman/BtcFeeReceiverServiceTest.java | 80 +++++ .../dao/burningman/BurningManServiceTest.java | 67 ----- .../DelayedPayoutTxReceiverServiceTest.java | 44 +++ .../burnbsq/burningmen/BurningmenView.java | 20 +- 19 files changed, 628 insertions(+), 348 deletions(-) create mode 100644 core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/BurningManInfoService.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/BurningManUtil.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java create mode 100644 core/src/test/java/bisq/core/dao/burningman/BtcFeeReceiverServiceTest.java create mode 100644 core/src/test/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverServiceTest.java diff --git a/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java new file mode 100644 index 0000000000..5d4e673ead --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java @@ -0,0 +1,117 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman; + +import bisq.core.dao.state.DaoStateListener; +import bisq.core.dao.state.DaoStateService; +import bisq.core.dao.state.model.blockchain.Block; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import com.google.common.annotations.VisibleForTesting; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.stream.Collectors; + +@Singleton +public class BtcFeeReceiverService implements DaoStateListener { + private final DaoStateService daoStateService; + private final BurningManService burningManService; + private int currentChainHeight; + + @Inject + public BtcFeeReceiverService(DaoStateService daoStateService, BurningManService burningManService) { + this.daoStateService = daoStateService; + this.burningManService = burningManService; + + daoStateService.addDaoStateListener(this); + + //todo + burningManService.setBtcFeeReceiverService(this); + } + + /////////////////////////////////////////////////////////////////////////////////////////// + // DaoStateListener + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public void onParseBlockCompleteAfterBatchProcessing(Block block) { + currentChainHeight = block.getHeight(); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // API + /////////////////////////////////////////////////////////////////////////////////////////// + + public String getBtcFeeReceiverAddress() { + Map burningManCandidatesByName = burningManService.getBurningManCandidatesByName(currentChainHeight); + int currentChainHeight = daoStateService.getBlockHeightOfLastBlock(); + if (burningManCandidatesByName.isEmpty()) { + // If there are no compensation requests (e.g. at dev testing) we fall back to the default address + return BurningManUtil.getLegacyBurningManAddress(daoStateService, currentChainHeight); + } + + // It might be that we do not reach 100% if some entries had a capped effectiveBurnOutputShare. + // We ignore that here as there is no risk for abuse. Each entry in the group would have a higher chance in + // that case. + // effectiveBurnOutputShare is a % value represented as double. Smallest supported value is 0.01% -> 0.0001. + // By multiplying it with 10000 and using Math.floor we limit the candidate to 0.01%. + // Entries with 0 will be ignored in the selection method. + List burningManCandidates = new ArrayList<>(burningManCandidatesByName.values()); + List amountList = burningManCandidates.stream() + .map(BurningManCandidate::getEffectiveBurnOutputShare) + .map(effectiveBurnOutputShare -> (long) Math.floor(effectiveBurnOutputShare * 10000)) + .collect(Collectors.toList()); + if (amountList.isEmpty()) { + return BurningManUtil.getLegacyBurningManAddress(daoStateService, currentChainHeight); + } + int winnerIndex = getRandomIndex(amountList, new Random()); + if (winnerIndex == -1) { + return BurningManUtil.getLegacyBurningManAddress(daoStateService, currentChainHeight); + } + return burningManCandidates.get(winnerIndex).getMostRecentAddress() + .orElse(BurningManUtil.getLegacyBurningManAddress(daoStateService, currentChainHeight)); + } + + @VisibleForTesting + static int getRandomIndex(List weights, Random random) { + long sum = weights.stream().mapToLong(n -> n).sum(); + if (sum == 0) { + return -1; + } + long target = random.longs(0, sum).findFirst().orElseThrow() + 1; + return findIndex(weights, target); + } + + @VisibleForTesting + static int findIndex(List weights, long target) { + int currentRange = 0; + for (int i = 0; i < weights.size(); i++) { + currentRange += weights.get(i); + if (currentRange >= target) { + return i; + } + } + return 0; + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManInfoService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManInfoService.java new file mode 100644 index 0000000000..683709d796 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManInfoService.java @@ -0,0 +1,159 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman; + +import bisq.core.btc.wallet.BsqWalletService; +import bisq.core.dao.governance.proposal.MyProposalListService; +import bisq.core.dao.state.DaoStateListener; +import bisq.core.dao.state.DaoStateService; +import bisq.core.dao.state.model.blockchain.Block; +import bisq.core.dao.state.model.governance.CompensationProposal; +import bisq.core.dao.state.model.governance.Proposal; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + +@Singleton +public class BurningManInfoService implements DaoStateListener { + private final DaoStateService daoStateService; + private final MyProposalListService myProposalListService; + private final BsqWalletService bsqWalletService; + private final BurningManService burningManService; + + private int currentChainHeight; + private Optional burnTarget; + private final Map burningManCandidatesByName = new HashMap<>(); + private final Set reimbursements = new HashSet<>(); + private Optional averageDistributionPerCycle = Optional.empty(); + private Set myCompensationRequestNames; + + private Optional> myGenesisOutputNames; + + @Inject + public BurningManInfoService(DaoStateService daoStateService, + MyProposalListService myProposalListService, + BsqWalletService bsqWalletService, + BurningManService burningManService) { + this.daoStateService = daoStateService; + this.myProposalListService = myProposalListService; + this.bsqWalletService = bsqWalletService; + this.burningManService = burningManService; + + daoStateService.addDaoStateListener(this); + + //todo + burningManService.setBurningManInfoService(this); + } + + /////////////////////////////////////////////////////////////////////////////////////////// + // DaoStateListener + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public void onParseBlockCompleteAfterBatchProcessing(Block block) { + currentChainHeight = block.getHeight(); + burningManCandidatesByName.clear(); + reimbursements.clear(); + burnTarget = Optional.empty(); + myCompensationRequestNames = null; + averageDistributionPerCycle = Optional.empty(); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // API + /////////////////////////////////////////////////////////////////////////////////////////// + + public long getCurrentBurnTarget() { + if (burnTarget.isPresent()) { + return burnTarget.get(); + } + + burnTarget = Optional.of(burningManService.getBurnTarget(currentChainHeight, getCurrentBurningManCandidatesByName().values())); + return burnTarget.get(); + } + + public long getAverageDistributionPerCycle() { + if (averageDistributionPerCycle.isPresent()) { + return averageDistributionPerCycle.get(); + } + + int fromBlock = burningManService.getFirstBlockOfPastCycle(currentChainHeight, 3); + long reimbursements = burningManService.getAccumulatedReimbursements(currentChainHeight, fromBlock); + long btcTradeFees = burningManService.getAccumulatedEstimatedBtcTradeFees(currentChainHeight, 3); + averageDistributionPerCycle = Optional.of(Math.round((reimbursements + btcTradeFees) / 3d)); + return averageDistributionPerCycle.get(); + } + + public Set getCurrentReimbursements() { + if (!reimbursements.isEmpty()) { + return reimbursements; + } + + reimbursements.addAll(burningManService.getReimbursements(currentChainHeight)); + return reimbursements; + } + + public Optional> findMyGenesisOutputNames() { + // Optional.empty is valid case, so we use null to detect if it was set. + // As it does not change at new blocks its only set once. + //noinspection OptionalAssignedToNull + if (myGenesisOutputNames != null) { + return myGenesisOutputNames; + } + + myGenesisOutputNames = daoStateService.getGenesisTx() + .flatMap(tx -> Optional.ofNullable(bsqWalletService.getTransaction(tx.getId())) + .map(genesisTransaction -> genesisTransaction.getOutputs().stream() + .filter(transactionOutput -> transactionOutput.isMine(bsqWalletService.getWallet())) + .map(transactionOutput -> BurningManService.GENESIS_OUTPUT_PREFIX + transactionOutput.getIndex()) + .collect(Collectors.toSet()) + ) + ); + return myGenesisOutputNames; + } + + public Set getMyCompensationRequestNames() { + // Can be empty, so we compare with null and reset to null at new block + if (myCompensationRequestNames != null) { + return myCompensationRequestNames; + } + myCompensationRequestNames = myProposalListService.getList().stream() + .filter(proposal -> proposal instanceof CompensationProposal) + .map(Proposal::getName) + .collect(Collectors.toSet()); + return myCompensationRequestNames; + } + + public Map getCurrentBurningManCandidatesByName() { + // Cached value is only used for currentChainHeight + if (!burningManCandidatesByName.isEmpty()) { + return burningManCandidatesByName; + } + + burningManCandidatesByName.putAll(burningManService.getBurningManCandidatesByName(currentChainHeight)); + return burningManCandidatesByName; + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index f9596b6458..2ea686e1ae 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -17,30 +17,24 @@ package bisq.core.dao.burningman; -import bisq.core.btc.wallet.BsqWalletService; import bisq.core.dao.governance.param.Param; import bisq.core.dao.governance.period.CycleService; import bisq.core.dao.governance.proofofburn.ProofOfBurnConsensus; -import bisq.core.dao.governance.proposal.MyProposalListService; import bisq.core.dao.governance.proposal.ProposalService; import bisq.core.dao.governance.proposal.storage.appendonly.ProposalPayload; -import bisq.core.dao.state.DaoStateListener; import bisq.core.dao.state.DaoStateService; import bisq.core.dao.state.model.blockchain.BaseTx; -import bisq.core.dao.state.model.blockchain.Block; import bisq.core.dao.state.model.blockchain.Tx; import bisq.core.dao.state.model.blockchain.TxOutput; import bisq.core.dao.state.model.governance.CompensationProposal; import bisq.core.dao.state.model.governance.Cycle; import bisq.core.dao.state.model.governance.Issuance; import bisq.core.dao.state.model.governance.IssuanceType; -import bisq.core.dao.state.model.governance.Proposal; import bisq.core.dao.state.model.governance.ReimbursementProposal; import bisq.network.p2p.storage.P2PDataStorage; import bisq.common.util.Hex; -import bisq.common.util.Tuple2; import bisq.common.util.Utilities; import javax.inject.Inject; @@ -50,26 +44,24 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Charsets; import com.google.common.collect.ImmutableList; -import java.util.ArrayList; import java.util.Collection; -import java.util.Comparator; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.Random; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; +import lombok.Getter; +import lombok.Setter; import lombok.extern.slf4j.Slf4j; @Slf4j @Singleton -public class BurningManService implements DaoStateListener { +public class BurningManService { // TODO // public static final Date ACTIVATION_DATE = Utilities.getUTCDate(2022, GregorianCalendar.OCTOBER, 25); public static final Date ACTIVATION_DATE = Utilities.getUTCDate(2023, GregorianCalendar.JANUARY, 1); @@ -82,7 +74,7 @@ public class BurningManService implements DaoStateListener { // Prefix for generic names for the genesis outputs. Appended with output index. // Used as pre-image for burning. - private static final String GENESIS_OUTPUT_PREFIX = "Bisq co-founder "; + static final String GENESIS_OUTPUT_PREFIX = "Bisq co-founder "; // Factor for weighting the genesis output amounts. private static final double GENESIS_OUTPUT_AMOUNT_FACTOR = 0.05; @@ -112,22 +104,15 @@ public class BurningManService implements DaoStateListener { // Burn target is calculated from reimbursements + estimated BTC fees - burned amounts. static final long BURN_TARGET_BOOST_AMOUNT = 10000000; - // One part of the limit for the min. amount to be included in the DPT outputs. - // The miner fee rate multiplied by 2 times the output size is the other factor. - // The higher one of both is used. 1000 sat is about 2 USD @ 20k price. - private static final long DPT_MIN_OUTPUT_AMOUNT = 1000; - - // If at DPT there is some leftover amount due to capping of some receivers (burn share is - // max. ISSUANCE_BOOST_FACTOR times the issuance share) we send it to legacy BM if it is larger - // than DPT_MIN_REMAINDER_TO_LEGACY_BM, otherwise we spend it as miner fee. - // 50000 sat is about 10 USD @ 20k price. We use a rather high value as we want to avoid that the legacy BM - // gets still payouts. - private static final long DPT_MIN_REMAINDER_TO_LEGACY_BM = 50000; - - // Min. fee rate for DPT. If fee rate used at take offer time was higher we use that. - // We prefer a rather high fee rate to not risk that the DPT gets stuck if required fee rate would - // spike when opening arbitration. - private static final long DPT_MIN_TX_FEE_RATE = 10; + @Getter + @Setter + private BurningManInfoService burningManInfoService; + @Getter + @Setter + private DelayedPayoutTxReceiverService delayedPayoutTxReceiverService; + @Getter + @Setter + private BtcFeeReceiverService btcFeeReceiverService; public static boolean isActivated() { @@ -137,40 +122,14 @@ public class BurningManService implements DaoStateListener { private final DaoStateService daoStateService; private final CycleService cycleService; private final ProposalService proposalService; - private final MyProposalListService myProposalListService; - private final BsqWalletService bsqWalletService; - - private final Map burningManCandidatesByName = new HashMap<>(); - private final Set reimbursements = new HashSet<>(); - private int currentChainHeight; - private Optional burnTarget = Optional.empty(); @Inject public BurningManService(DaoStateService daoStateService, CycleService cycleService, - ProposalService proposalService, - MyProposalListService myProposalListService, - BsqWalletService bsqWalletService) { + ProposalService proposalService) { this.daoStateService = daoStateService; this.cycleService = cycleService; this.proposalService = proposalService; - this.myProposalListService = myProposalListService; - this.bsqWalletService = bsqWalletService; - - daoStateService.addDaoStateListener(this); - } - - - /////////////////////////////////////////////////////////////////////////////////////////// - // DaoStateListener - /////////////////////////////////////////////////////////////////////////////////////////// - - @Override - public void onParseBlockCompleteAfterBatchProcessing(Block block) { - burningManCandidatesByName.clear(); - reimbursements.clear(); - currentChainHeight = block.getHeight(); - burnTarget = Optional.empty(); } @@ -178,17 +137,6 @@ public class BurningManService implements DaoStateListener { // BurningManCandidates /////////////////////////////////////////////////////////////////////////////////////////// - // Based on current block height - public Map getCurrentBurningManCandidatesByName() { - // Cached value is only used for currentChainHeight - if (!burningManCandidatesByName.isEmpty()) { - return burningManCandidatesByName; - } - - burningManCandidatesByName.putAll(getBurningManCandidatesByName(currentChainHeight)); - return burningManCandidatesByName; - } - // Allows recreation of data model for the given chainHeight public Map getBurningManCandidatesByName(int chainHeight) { Map burningManCandidatesByName = new HashMap<>(); @@ -259,8 +207,10 @@ public class BurningManService implements DaoStateListener { .mapToDouble(BurningManCandidate::getAccumulatedDecayedBurnAmount) .sum(); long burnTarget = getBurnTarget(chainHeight, burningManCandidates); + + //todo avoid burningManInfoService call burningManCandidates.forEach(candidate -> - candidate.calculateShare(totalDecayedCompensationAmounts, totalDecayedBurnAmounts, burnTarget, getAverageDistributionPerCycle())); + candidate.calculateShare(totalDecayedCompensationAmounts, totalDecayedBurnAmounts, burnTarget, burningManInfoService.getAverageDistributionPerCycle())); return burningManCandidatesByName; } @@ -352,16 +302,6 @@ public class BurningManService implements DaoStateListener { // Burn target, average distribution/cycle /////////////////////////////////////////////////////////////////////////////////////////// - // Burn target using current chain height - public long getCurrentBurnTarget() { - // cached value is only used for currentChainHeight - if (burnTarget.isPresent()) { - return burnTarget.get(); - } - - burnTarget = Optional.of(getBurnTarget(currentChainHeight, getCurrentBurningManCandidatesByName().values())); - return burnTarget.get(); - } // Burn target using given chain height. Can be historical state. public long getBurnTarget(int chainHeight, Collection burningManCandidates) { @@ -385,14 +325,7 @@ public class BurningManService implements DaoStateListener { - burnedAmountFromBurningMen; } - public long getAverageDistributionPerCycle() { - int fromBlock = getFirstBlockOfPastCycle(currentChainHeight, 3); - long reimbursements = getAccumulatedReimbursements(currentChainHeight, fromBlock); - long btcTradeFees = getAccumulatedEstimatedBtcTradeFees(currentChainHeight, 3); - return Math.round((reimbursements + btcTradeFees) / 3d); - } - - private long getAccumulatedEstimatedBtcTradeFees(int chainHeight, int numCycles) { + long getAccumulatedEstimatedBtcTradeFees(int chainHeight, int numCycles) { Optional optionalCycle = daoStateService.getCycle(chainHeight); if (optionalCycle.isEmpty()) { return 0; @@ -420,7 +353,7 @@ public class BurningManService implements DaoStateListener { return value != 4320 ? value : DEFAULT_ESTIMATED_BTC_FEES; } - private int getFirstBlockOfPastCycle(int chainHeight, int numPastCycles) { + int getFirstBlockOfPastCycle(int chainHeight, int numPastCycles) { Optional optionalCycle = daoStateService.getCycle(chainHeight); if (optionalCycle.isEmpty()) { return 0; @@ -480,18 +413,7 @@ public class BurningManService implements DaoStateListener { // Reimbursements /////////////////////////////////////////////////////////////////////////////////////////// - public Set getCurrentReimbursements() { - // cached value is only used for currentChainHeight - if (!reimbursements.isEmpty()) { - return reimbursements; - } - - Set set = getReimbursements(currentChainHeight); - reimbursements.addAll(set); - return reimbursements; - } - - private Set getReimbursements(int chainHeight) { + Set getReimbursements(int chainHeight) { Set reimbursements = new HashSet<>(); daoStateService.getIssuanceSetForType(IssuanceType.REIMBURSEMENT).stream() .filter(issuance -> issuance.getChainHeight() <= chainHeight) @@ -510,7 +432,7 @@ public class BurningManService implements DaoStateListener { return reimbursements; } - private long getAccumulatedReimbursements(int chainHeight, int fromBlock) { + long getAccumulatedReimbursements(int chainHeight, int fromBlock) { return getReimbursements(chainHeight).stream() .filter(reimbursementModel -> reimbursementModel.getHeight() >= fromBlock) .mapToLong(ReimbursementModel::getAmount) @@ -526,132 +448,6 @@ public class BurningManService implements DaoStateListener { } - /////////////////////////////////////////////////////////////////////////////////////////// - // Contributor names - /////////////////////////////////////////////////////////////////////////////////////////// - - public Optional> findMyGenesisOutputNames() { - return daoStateService.getGenesisTx() - .flatMap(tx -> Optional.ofNullable(bsqWalletService.getTransaction(tx.getId())) - .map(genesisTransaction -> genesisTransaction.getOutputs().stream() - .filter(transactionOutput -> transactionOutput.isMine(bsqWalletService.getWallet())) - .map(transactionOutput -> BurningManService.GENESIS_OUTPUT_PREFIX + transactionOutput.getIndex()) - .collect(Collectors.toSet()) - ) - ); - } - - public Set getMyCompensationRequestNames() { - return myProposalListService.getList().stream() - .filter(proposal -> proposal instanceof CompensationProposal) - .map(Proposal::getName) - .collect(Collectors.toSet()); - } - - - /////////////////////////////////////////////////////////////////////////////////////////// - // Legacy BurningMan - /////////////////////////////////////////////////////////////////////////////////////////// - - public String getLegacyBurningManAddress(int chainHeight) { - return daoStateService.getParamValue(Param.RECIPIENT_BTC_ADDRESS, chainHeight); - } - - - /////////////////////////////////////////////////////////////////////////////////////////// - // BTC Trade fees - /////////////////////////////////////////////////////////////////////////////////////////// - - public String getBtcFeeReceiverAddress() { - Map burningManCandidatesByName = getCurrentBurningManCandidatesByName(); - if (burningManCandidatesByName.isEmpty()) { - // If there are no compensation requests (e.g. at dev testing) we fall back to the default address - return getLegacyBurningManAddress(currentChainHeight); - } - - // It might be that we do not reach 100% if some entries had a capped effectiveBurnOutputShare. - // We ignore that here as there is no risk for abuse. Each entry in the group would have a higher chance in - // that case. - // effectiveBurnOutputShare is a % value represented as double. Smallest supported value is 0.01% -> 0.0001. - // By multiplying it with 10000 and using Math.floor we limit the candidate to 0.01%. - // Entries with 0 will be ignored in the selection method. - List burningManCandidates = new ArrayList<>(burningManCandidatesByName.values()); - List amountList = burningManCandidates.stream() - .map(BurningManCandidate::getEffectiveBurnOutputShare) - .map(effectiveBurnOutputShare -> (long) Math.floor(effectiveBurnOutputShare * 10000)) - .collect(Collectors.toList()); - if (amountList.isEmpty()) { - return getLegacyBurningManAddress(currentChainHeight); - } - int winnerIndex = getRandomIndex(amountList, new Random()); - if (winnerIndex == -1) { - return getLegacyBurningManAddress(currentChainHeight); - } - return burningManCandidates.get(winnerIndex).getMostRecentAddress() - .orElse(getLegacyBurningManAddress(currentChainHeight)); - } - - - /////////////////////////////////////////////////////////////////////////////////////////// - // Delayed payout transactions - /////////////////////////////////////////////////////////////////////////////////////////// - - // We use a snapshot blockHeight to avoid failed trades in case maker and taker have different block heights. - // The selection is deterministic based on DAO data. - // The block height is the last mod(10) height from the range of the last 10-20 blocks (139 -> 120; 140 -> 130, 141 -> 130). - // We do not have the latest dao state by that but can ensure maker and taker have the same block. - public int getBurningManSelectionHeight() { - return getSnapshotHeight(daoStateService.getGenesisBlockHeight(), currentChainHeight, 10); - } - - public List> getDelayedPayoutTxReceivers(int burningManSelectionHeight, - long inputAmount, - long tradeTxFee) { - Collection burningManCandidates = getBurningManCandidatesByName(burningManSelectionHeight).values(); - if (burningManCandidates.isEmpty()) { - // If there are no compensation requests (e.g. at dev testing) we fall back to the legacy BM - return List.of(new Tuple2<>(inputAmount, getLegacyBurningManAddress(burningManSelectionHeight))); - } - - // We need to use the same txFeePerVbyte value for both traders. - // We use the tradeTxFee value which is calculated from the average of taker fee tx size and deposit tx size. - // Otherwise, we would need to sync the fee rate of both traders. - // In case of very large taker fee tx we would get a too high fee, but as fee rate is anyway rather - // arbitrary and volatile we are on the safer side. The delayed payout tx is published long after the - // take offer event and the recommended fee at that moment might be very different to actual - // recommended fee. To avoid that the delayed payout tx would get stuck due too low fees we use a - // min. fee rate of 10 sat/vByte. - - // Deposit tx has a clearly defined structure, so we know the size. It is only one optional output if range amount offer was taken. - // Smallest tx size is 246. With additional change output we add 32. To be safe we use the largest expected size. - double txSize = 278; - long txFeePerVbyte = Math.max(DPT_MIN_TX_FEE_RATE, Math.round(tradeTxFee / txSize)); - long spendableAmount = getSpendableAmount(burningManCandidates.size(), inputAmount, txFeePerVbyte); - // We only use outputs > 1000 sat or at least 2 times the cost for the output (32 bytes). - // If we remove outputs it will be spent as miner fee. - long minOutputAmount = Math.max(DPT_MIN_OUTPUT_AMOUNT, txFeePerVbyte * 32 * 2); - - List> receivers = burningManCandidates.stream() - .filter(candidate -> candidate.getMostRecentAddress().isPresent()) - .map(candidates -> new Tuple2<>(Math.round(candidates.getEffectiveBurnOutputShare() * spendableAmount), - candidates.getMostRecentAddress().get())) - .filter(tuple -> tuple.first >= minOutputAmount) - .sorted(Comparator., Long>comparing(tuple -> tuple.first) - .thenComparing(tuple -> tuple.second)) - .collect(Collectors.toList()); - long totalOutputValue = receivers.stream().mapToLong(e -> e.first).sum(); - if (totalOutputValue < spendableAmount) { - long available = spendableAmount - totalOutputValue; - // If the available is larger than DPT_MIN_REMAINDER_TO_LEGACY_BM we send it to legacy BM - // Otherwise we use it as miner fee - if (available > DPT_MIN_REMAINDER_TO_LEGACY_BM) { - receivers.add(new Tuple2<>(available, getLegacyBurningManAddress(burningManSelectionHeight))); - } - } - return receivers; - } - - /////////////////////////////////////////////////////////////////////////////////////////// // Utils /////////////////////////////////////////////////////////////////////////////////////////// @@ -660,14 +456,6 @@ public class BurningManService implements DaoStateListener { return daoStateService.getCycle(height).map(cycleService::getCycleIndex).orElse(0); } - private static long getSpendableAmount(int numOutputs, long inputAmount, long txFeePerVbyte) { - // Output size: 32 bytes - // Tx size without outputs: 51 bytes - int txSize = 51 + numOutputs * 32; - long minerFee = txFeePerVbyte * txSize; - return inputAmount - minerFee; - } - private long getDecayedCompensationAmount(long amount, int issuanceHeight, int chainHeight) { return getDecayedAmount(amount, issuanceHeight, chainHeight, chainHeight - MAX_COMP_REQUEST_AGE, 0); } @@ -707,32 +495,4 @@ public class BurningManService implements DaoStateListener { long weighted = Math.round(amount * factorWithOffset); return Math.max(0, weighted); } - - @VisibleForTesting - static int getRandomIndex(List weights, Random random) { - long sum = weights.stream().mapToLong(n -> n).sum(); - if (sum == 0) { - return -1; - } - long target = random.longs(0, sum).findFirst().orElseThrow() + 1; - return findIndex(weights, target); - } - - @VisibleForTesting - static int findIndex(List weights, long target) { - int currentRange = 0; - for (int i = 0; i < weights.size(); i++) { - currentRange += weights.get(i); - if (currentRange >= target) { - return i; - } - } - return 0; - } - - // Borrowed from DaoStateSnapshotService. We prefer to not reuse to avoid dependency to an unrelated domain. - @VisibleForTesting - static int getSnapshotHeight(int genesisHeight, int height, int grid) { - return Math.round(Math.max(genesisHeight + 3 * grid, height) / grid) * grid - grid; - } } diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManUtil.java b/core/src/main/java/bisq/core/dao/burningman/BurningManUtil.java new file mode 100644 index 0000000000..7d5fc5ff6b --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManUtil.java @@ -0,0 +1,32 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman; + +import bisq.core.dao.governance.param.Param; +import bisq.core.dao.state.DaoStateService; + +public class BurningManUtil { + + /////////////////////////////////////////////////////////////////////////////////////////// + // Legacy BurningMan + /////////////////////////////////////////////////////////////////////////////////////////// + + public static String getLegacyBurningManAddress(DaoStateService daoStateService, int chainHeight) { + return daoStateService.getParamValue(Param.RECIPIENT_BTC_ADDRESS, chainHeight); + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java new file mode 100644 index 0000000000..9b097bc6a4 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java @@ -0,0 +1,155 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman; + +import bisq.core.dao.state.DaoStateListener; +import bisq.core.dao.state.DaoStateService; +import bisq.core.dao.state.model.blockchain.Block; + +import bisq.common.util.Tuple2; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import com.google.common.annotations.VisibleForTesting; + +import java.util.Collection; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + +@Singleton +public class DelayedPayoutTxReceiverService implements DaoStateListener { + + // One part of the limit for the min. amount to be included in the DPT outputs. + // The miner fee rate multiplied by 2 times the output size is the other factor. + // The higher one of both is used. 1000 sat is about 2 USD @ 20k price. + private static final long DPT_MIN_OUTPUT_AMOUNT = 1000; + + // If at DPT there is some leftover amount due to capping of some receivers (burn share is + // max. ISSUANCE_BOOST_FACTOR times the issuance share) we send it to legacy BM if it is larger + // than DPT_MIN_REMAINDER_TO_LEGACY_BM, otherwise we spend it as miner fee. + // 50000 sat is about 10 USD @ 20k price. We use a rather high value as we want to avoid that the legacy BM + // gets still payouts. + private static final long DPT_MIN_REMAINDER_TO_LEGACY_BM = 50000; + + // Min. fee rate for DPT. If fee rate used at take offer time was higher we use that. + // We prefer a rather high fee rate to not risk that the DPT gets stuck if required fee rate would + // spike when opening arbitration. + private static final long DPT_MIN_TX_FEE_RATE = 10; + + + private final DaoStateService daoStateService; + private final BurningManService burningManService; + private int currentChainHeight; + + @Inject + public DelayedPayoutTxReceiverService(DaoStateService daoStateService, BurningManService burningManService) { + this.daoStateService = daoStateService; + this.burningManService = burningManService; + + daoStateService.addDaoStateListener(this); + + //todo + burningManService.setDelayedPayoutTxReceiverService(this); + } + + /////////////////////////////////////////////////////////////////////////////////////////// + // DaoStateListener + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public void onParseBlockCompleteAfterBatchProcessing(Block block) { + currentChainHeight = block.getHeight(); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // API + /////////////////////////////////////////////////////////////////////////////////////////// + + + // We use a snapshot blockHeight to avoid failed trades in case maker and taker have different block heights. + // The selection is deterministic based on DAO data. + // The block height is the last mod(10) height from the range of the last 10-20 blocks (139 -> 120; 140 -> 130, 141 -> 130). + // We do not have the latest dao state by that but can ensure maker and taker have the same block. + public int getBurningManSelectionHeight() { + return getSnapshotHeight(daoStateService.getGenesisBlockHeight(), currentChainHeight, 10); + } + + public List> getDelayedPayoutTxReceivers(int burningManSelectionHeight, + long inputAmount, + long tradeTxFee) { + Collection burningManCandidates = burningManService.getBurningManCandidatesByName(burningManSelectionHeight).values(); + if (burningManCandidates.isEmpty()) { + // If there are no compensation requests (e.g. at dev testing) we fall back to the legacy BM + return List.of(new Tuple2<>(inputAmount, BurningManUtil.getLegacyBurningManAddress(daoStateService, burningManSelectionHeight))); + } + + // We need to use the same txFeePerVbyte value for both traders. + // We use the tradeTxFee value which is calculated from the average of taker fee tx size and deposit tx size. + // Otherwise, we would need to sync the fee rate of both traders. + // In case of very large taker fee tx we would get a too high fee, but as fee rate is anyway rather + // arbitrary and volatile we are on the safer side. The delayed payout tx is published long after the + // take offer event and the recommended fee at that moment might be very different to actual + // recommended fee. To avoid that the delayed payout tx would get stuck due too low fees we use a + // min. fee rate of 10 sat/vByte. + + // Deposit tx has a clearly defined structure, so we know the size. It is only one optional output if range amount offer was taken. + // Smallest tx size is 246. With additional change output we add 32. To be safe we use the largest expected size. + double txSize = 278; + long txFeePerVbyte = Math.max(DPT_MIN_TX_FEE_RATE, Math.round(tradeTxFee / txSize)); + long spendableAmount = getSpendableAmount(burningManCandidates.size(), inputAmount, txFeePerVbyte); + // We only use outputs > 1000 sat or at least 2 times the cost for the output (32 bytes). + // If we remove outputs it will be spent as miner fee. + long minOutputAmount = Math.max(DPT_MIN_OUTPUT_AMOUNT, txFeePerVbyte * 32 * 2); + + List> receivers = burningManCandidates.stream() + .filter(candidate -> candidate.getMostRecentAddress().isPresent()) + .map(candidates -> new Tuple2<>(Math.round(candidates.getEffectiveBurnOutputShare() * spendableAmount), + candidates.getMostRecentAddress().get())) + .filter(tuple -> tuple.first >= minOutputAmount) + .sorted(Comparator., Long>comparing(tuple -> tuple.first) + .thenComparing(tuple -> tuple.second)) + .collect(Collectors.toList()); + long totalOutputValue = receivers.stream().mapToLong(e -> e.first).sum(); + if (totalOutputValue < spendableAmount) { + long available = spendableAmount - totalOutputValue; + // If the available is larger than DPT_MIN_REMAINDER_TO_LEGACY_BM we send it to legacy BM + // Otherwise we use it as miner fee + if (available > DPT_MIN_REMAINDER_TO_LEGACY_BM) { + receivers.add(new Tuple2<>(available, BurningManUtil.getLegacyBurningManAddress(daoStateService, burningManSelectionHeight))); + } + } + return receivers; + } + + private static long getSpendableAmount(int numOutputs, long inputAmount, long txFeePerVbyte) { + // Output size: 32 bytes + // Tx size without outputs: 51 bytes + int txSize = 51 + numOutputs * 32; + long minerFee = txFeePerVbyte * txSize; + return inputAmount - minerFee; + } + + // Borrowed from DaoStateSnapshotService. We prefer to not reuse to avoid dependency to an unrelated domain. + @VisibleForTesting + static int getSnapshotHeight(int genesisHeight, int height, int grid) { + return Math.round(Math.max(genesisHeight + 3 * grid, height) / grid) * grid - grid; + } +} diff --git a/core/src/main/java/bisq/core/offer/OpenOfferManager.java b/core/src/main/java/bisq/core/offer/OpenOfferManager.java index f3c0c270b6..1174d68888 100644 --- a/core/src/main/java/bisq/core/offer/OpenOfferManager.java +++ b/core/src/main/java/bisq/core/offer/OpenOfferManager.java @@ -673,7 +673,7 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe int takersBurningManSelectionHeight = request.getBurningManSelectionHeight(); checkArgument(takersBurningManSelectionHeight > 0, "takersBurningManSelectionHeight must not be 0"); - int makersBurningManSelectionHeight = burningManService.getBurningManSelectionHeight(); + int makersBurningManSelectionHeight = burningManService.getDelayedPayoutTxReceiverService().getBurningManSelectionHeight(); checkArgument(takersBurningManSelectionHeight == makersBurningManSelectionHeight, "takersBurningManSelectionHeight does no match makersBurningManSelectionHeight"); } catch (Throwable t) { diff --git a/core/src/main/java/bisq/core/offer/availability/tasks/SendOfferAvailabilityRequest.java b/core/src/main/java/bisq/core/offer/availability/tasks/SendOfferAvailabilityRequest.java index b2d894e899..450122bdd2 100644 --- a/core/src/main/java/bisq/core/offer/availability/tasks/SendOfferAvailabilityRequest.java +++ b/core/src/main/java/bisq/core/offer/availability/tasks/SendOfferAvailabilityRequest.java @@ -39,7 +39,7 @@ public class SendOfferAvailabilityRequest extends Task { try { runInterceptHook(); - int burningManSelectionHeight = model.getBurningManService().getBurningManSelectionHeight(); + int burningManSelectionHeight = model.getBurningManService().getDelayedPayoutTxReceiverService().getBurningManSelectionHeight(); OfferAvailabilityRequest message = new OfferAvailabilityRequest(model.getOffer().getId(), model.getPubKeyRing(), model.getTakersTradePrice(), diff --git a/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/tasks/CreateMakerFeeTx.java b/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/tasks/CreateMakerFeeTx.java index 8d730000fa..eb915cb488 100644 --- a/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/tasks/CreateMakerFeeTx.java +++ b/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/tasks/CreateMakerFeeTx.java @@ -66,7 +66,7 @@ public class CreateMakerFeeTx extends Task { TradeWalletService tradeWalletService = model.getTradeWalletService(); if (offer.isCurrencyForMakerFeeBtc()) { - String feeReceiver = model.getBurningManService().getBtcFeeReceiverAddress(); + String feeReceiver = model.getBurningManService().getBtcFeeReceiverService().getBtcFeeReceiverAddress(); tradeWalletService.createBtcTradingFeeTx( fundingAddress, reservedForTradeAddress, diff --git a/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java b/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java index 50ba6aafb5..9c7d83e6b9 100644 --- a/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java +++ b/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java @@ -319,7 +319,7 @@ public final class RefundManager extends DisputeManager { public void verifyDelayedPayoutTxReceivers(Transaction delayedPayoutTx, Dispute dispute) { Transaction depositTx = dispute.findDepositTx(btcWalletService).orElseThrow(); long inputAmount = depositTx.getOutput(0).getValue().value; - List> delayedPayoutTxReceivers = burningManService.getDelayedPayoutTxReceivers( + List> delayedPayoutTxReceivers = burningManService.getDelayedPayoutTxReceiverService().getDelayedPayoutTxReceivers( dispute.getBurningManSelectionHeight(), inputAmount, dispute.getTradeTxFee()); diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java index abce4d1120..009add5ecc 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java @@ -63,7 +63,7 @@ public class BuyerVerifiesFinalDelayedPayoutTx extends TradeTask { if (BurningManService.isActivated()) { long inputAmount = depositTx.getOutput(0).getValue().value; long tradeTxFeeAsLong = trade.getTradeTxFeeAsLong(); - List> delayedPayoutTxReceivers = processModel.getBurningManService().getDelayedPayoutTxReceivers( + List> delayedPayoutTxReceivers = processModel.getBurningManService().getDelayedPayoutTxReceiverService().getDelayedPayoutTxReceivers( processModel.getBurningManSelectionHeight(), inputAmount, tradeTxFeeAsLong); diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesPreparedDelayedPayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesPreparedDelayedPayoutTx.java index 51a9f0d363..3351783d6f 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesPreparedDelayedPayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesPreparedDelayedPayoutTx.java @@ -56,7 +56,7 @@ public class BuyerVerifiesPreparedDelayedPayoutTx extends TradeTask { if (BurningManService.isActivated()) { long inputAmount = preparedDepositTx.getOutput(0).getValue().value; long tradeTxFeeAsLong = trade.getTradeTxFeeAsLong(); - List> delayedPayoutTxReceivers = processModel.getBurningManService().getDelayedPayoutTxReceivers( + List> delayedPayoutTxReceivers = processModel.getBurningManService().getDelayedPayoutTxReceiverService().getDelayedPayoutTxReceivers( processModel.getBurningManSelectionHeight(), inputAmount, tradeTxFeeAsLong); diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/maker/MakerProcessesInputsForDepositTxRequest.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/maker/MakerProcessesInputsForDepositTxRequest.java index e2e661212f..eb92f9c269 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/maker/MakerProcessesInputsForDepositTxRequest.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/maker/MakerProcessesInputsForDepositTxRequest.java @@ -84,7 +84,7 @@ public class MakerProcessesInputsForDepositTxRequest extends TradeTask { int takersBurningManSelectionHeight = request.getBurningManSelectionHeight(); checkArgument(takersBurningManSelectionHeight > 0, "takersBurningManSelectionHeight must not be 0"); - int makersBurningManSelectionHeight = processModel.getBurningManService().getBurningManSelectionHeight(); + int makersBurningManSelectionHeight = processModel.getBurningManService().getDelayedPayoutTxReceiverService().getBurningManSelectionHeight(); checkArgument(takersBurningManSelectionHeight == makersBurningManSelectionHeight, "takersBurningManSelectionHeight does no match makersBurningManSelectionHeight"); processModel.setBurningManSelectionHeight(makersBurningManSelectionHeight); diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java index 6cfdaca4c0..84e983fc3b 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java @@ -54,7 +54,7 @@ public class SellerCreatesDelayedPayoutTx extends TradeTask { if (BurningManService.isActivated()) { long inputAmount = depositTx.getOutput(0).getValue().value; long tradeTxFeeAsLong = trade.getTradeTxFeeAsLong(); - List> delayedPayoutTxReceivers = processModel.getBurningManService().getDelayedPayoutTxReceivers( + List> delayedPayoutTxReceivers = processModel.getBurningManService().getDelayedPayoutTxReceiverService().getDelayedPayoutTxReceivers( processModel.getBurningManSelectionHeight(), inputAmount, tradeTxFeeAsLong); diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/CreateTakerFeeTx.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/CreateTakerFeeTx.java index 65217954ae..a1cdfc76f0 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/CreateTakerFeeTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/CreateTakerFeeTx.java @@ -65,7 +65,7 @@ public class CreateTakerFeeTx extends TradeTask { Transaction transaction; if (trade.isCurrencyForTakerFeeBtc()) { - String feeReceiver = processModel.getBurningManService().getBtcFeeReceiverAddress(); + String feeReceiver = processModel.getBurningManService().getBtcFeeReceiverService().getBtcFeeReceiverAddress(); transaction = tradeWalletService.createBtcTradingFeeTx( fundingAddress, reservedForTradeAddress, diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/TakerSendInputsForDepositTxRequest.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/TakerSendInputsForDepositTxRequest.java index 388e300711..deb3f55c30 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/TakerSendInputsForDepositTxRequest.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/TakerSendInputsForDepositTxRequest.java @@ -104,7 +104,7 @@ public class TakerSendInputsForDepositTxRequest extends TradeTask { byte[] signatureOfNonce = Sig.sign(processModel.getKeyRing().getSignatureKeyPair().getPrivate(), offerId.getBytes(Charsets.UTF_8)); - int burningManSelectionHeight = processModel.getBurningManService().getBurningManSelectionHeight(); + int burningManSelectionHeight = processModel.getBurningManService().getDelayedPayoutTxReceiverService().getBurningManSelectionHeight(); processModel.setBurningManSelectionHeight(burningManSelectionHeight); String takersPaymentMethodId = checkNotNull(processModel.getPaymentAccountPayload(trade)).getPaymentMethodId(); diff --git a/core/src/test/java/bisq/core/dao/burningman/BtcFeeReceiverServiceTest.java b/core/src/test/java/bisq/core/dao/burningman/BtcFeeReceiverServiceTest.java new file mode 100644 index 0000000000..04ae86c415 --- /dev/null +++ b/core/src/test/java/bisq/core/dao/burningman/BtcFeeReceiverServiceTest.java @@ -0,0 +1,80 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman; + + +import com.google.common.primitives.Longs; + +import java.util.List; +import java.util.Random; + +import org.mockito.junit.MockitoJUnitRunner; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.assertEquals; + +@RunWith(MockitoJUnitRunner.class) +public class BtcFeeReceiverServiceTest { + @Test + public void testGetRandomIndex() { + Random rnd = new Random(456); + assertEquals(4, BtcFeeReceiverService.getRandomIndex(Longs.asList(0, 0, 0, 3, 3), rnd)); + assertEquals(3, BtcFeeReceiverService.getRandomIndex(Longs.asList(0, 0, 0, 6, 0, 0, 0, 0, 0), rnd)); + + assertEquals(-1, BtcFeeReceiverService.getRandomIndex(Longs.asList(), rnd)); + assertEquals(-1, BtcFeeReceiverService.getRandomIndex(Longs.asList(0), rnd)); + assertEquals(-1, BtcFeeReceiverService.getRandomIndex(Longs.asList(0, 0), rnd)); + + int[] selections = new int[3]; + for (int i = 0; i < 6000; i++) { + selections[BtcFeeReceiverService.getRandomIndex(Longs.asList(1, 2, 3), rnd)]++; + } + // selections with new Random(456) are: [986, 1981, 3033] + assertEquals(1000.0, selections[0], 100); + assertEquals(2000.0, selections[1], 100); + assertEquals(3000.0, selections[2], 100); + } + + @Test + public void testFindIndex() { + List weights = Longs.asList(1, 2, 3); + assertEquals(0, BtcFeeReceiverService.findIndex(weights, 1)); + assertEquals(1, BtcFeeReceiverService.findIndex(weights, 2)); + assertEquals(1, BtcFeeReceiverService.findIndex(weights, 3)); + assertEquals(2, BtcFeeReceiverService.findIndex(weights, 4)); + assertEquals(2, BtcFeeReceiverService.findIndex(weights, 5)); + assertEquals(2, BtcFeeReceiverService.findIndex(weights, 6)); + + // invalid values return index 0 + assertEquals(0, BtcFeeReceiverService.findIndex(weights, 0)); + assertEquals(0, BtcFeeReceiverService.findIndex(weights, 7)); + + assertEquals(0, BtcFeeReceiverService.findIndex(Longs.asList(0, 1, 2, 3), 0)); + assertEquals(0, BtcFeeReceiverService.findIndex(Longs.asList(1, 2, 3), 0)); + assertEquals(0, BtcFeeReceiverService.findIndex(Longs.asList(1, 2, 3), 1)); + assertEquals(1, BtcFeeReceiverService.findIndex(Longs.asList(0, 1, 2, 3), 1)); + assertEquals(2, BtcFeeReceiverService.findIndex(Longs.asList(0, 1, 2, 3), 2)); + assertEquals(1, BtcFeeReceiverService.findIndex(Longs.asList(0, 1, 0, 2, 3), 1)); + assertEquals(3, BtcFeeReceiverService.findIndex(Longs.asList(0, 1, 0, 2, 3), 2)); + assertEquals(3, BtcFeeReceiverService.findIndex(Longs.asList(0, 0, 0, 1, 2, 3), 1)); + assertEquals(4, BtcFeeReceiverService.findIndex(Longs.asList(0, 0, 0, 1, 2, 3), 2)); + assertEquals(6, BtcFeeReceiverService.findIndex(Longs.asList(0, 0, 0, 1, 0, 0, 2, 3), 2)); + } +} diff --git a/core/src/test/java/bisq/core/dao/burningman/BurningManServiceTest.java b/core/src/test/java/bisq/core/dao/burningman/BurningManServiceTest.java index 8caab752d6..4b5aa74d49 100644 --- a/core/src/test/java/bisq/core/dao/burningman/BurningManServiceTest.java +++ b/core/src/test/java/bisq/core/dao/burningman/BurningManServiceTest.java @@ -18,11 +18,6 @@ package bisq.core.dao.burningman; -import com.google.common.primitives.Longs; - -import java.util.List; -import java.util.Random; - import org.mockito.junit.MockitoJUnitRunner; import org.junit.Test; @@ -32,22 +27,6 @@ import static org.junit.Assert.assertEquals; @RunWith(MockitoJUnitRunner.class) public class BurningManServiceTest { - - @Test - public void testGetSnapshotHeight() { - assertEquals(120, BurningManService.getSnapshotHeight(102, 0, 10)); - assertEquals(120, BurningManService.getSnapshotHeight(102, 100, 10)); - assertEquals(120, BurningManService.getSnapshotHeight(102, 102, 10)); - assertEquals(120, BurningManService.getSnapshotHeight(102, 119, 10)); - assertEquals(120, BurningManService.getSnapshotHeight(102, 120, 10)); - assertEquals(120, BurningManService.getSnapshotHeight(102, 121, 10)); - assertEquals(120, BurningManService.getSnapshotHeight(102, 130, 10)); - assertEquals(120, BurningManService.getSnapshotHeight(102, 139, 10)); - assertEquals(130, BurningManService.getSnapshotHeight(102, 140, 10)); - assertEquals(130, BurningManService.getSnapshotHeight(102, 141, 10)); - assertEquals(990, BurningManService.getSnapshotHeight(102, 1000, 10)); - } - @Test public void testGetDecayedAmount() { long amount = 100; @@ -72,50 +51,4 @@ public class BurningManServiceTest { assertEquals(100, BurningManService.getDecayedAmount(amount, 1200, currentBlockHeight, genesisBlockHeight, 1)); assertEquals(100, BurningManService.getDecayedAmount(amount, 1400, currentBlockHeight, genesisBlockHeight, 1)); } - - @Test - public void testGetRandomIndex() { - Random rnd = new Random(456); - assertEquals(4, BurningManService.getRandomIndex(Longs.asList(0, 0, 0, 3, 3), rnd)); - assertEquals(3, BurningManService.getRandomIndex(Longs.asList(0, 0, 0, 6, 0, 0, 0, 0, 0), rnd)); - - assertEquals(-1, BurningManService.getRandomIndex(Longs.asList(), rnd)); - assertEquals(-1, BurningManService.getRandomIndex(Longs.asList(0), rnd)); - assertEquals(-1, BurningManService.getRandomIndex(Longs.asList(0, 0), rnd)); - - int[] selections = new int[3]; - for (int i = 0; i < 6000; i++) { - selections[BurningManService.getRandomIndex(Longs.asList(1, 2, 3), rnd)]++; - } - // selections with new Random(456) are: [986, 1981, 3033] - assertEquals(1000.0, selections[0], 100); - assertEquals(2000.0, selections[1], 100); - assertEquals(3000.0, selections[2], 100); - } - - @Test - public void testFindIndex() { - List weights = Longs.asList(1, 2, 3); - assertEquals(0, BurningManService.findIndex(weights, 1)); - assertEquals(1, BurningManService.findIndex(weights, 2)); - assertEquals(1, BurningManService.findIndex(weights, 3)); - assertEquals(2, BurningManService.findIndex(weights, 4)); - assertEquals(2, BurningManService.findIndex(weights, 5)); - assertEquals(2, BurningManService.findIndex(weights, 6)); - - // invalid values return index 0 - assertEquals(0, BurningManService.findIndex(weights, 0)); - assertEquals(0, BurningManService.findIndex(weights, 7)); - - assertEquals(0, BurningManService.findIndex(Longs.asList(0, 1, 2, 3), 0)); - assertEquals(0, BurningManService.findIndex(Longs.asList(1, 2, 3), 0)); - assertEquals(0, BurningManService.findIndex(Longs.asList(1, 2, 3), 1)); - assertEquals(1, BurningManService.findIndex(Longs.asList(0, 1, 2, 3), 1)); - assertEquals(2, BurningManService.findIndex(Longs.asList(0, 1, 2, 3), 2)); - assertEquals(1, BurningManService.findIndex(Longs.asList(0, 1, 0, 2, 3), 1)); - assertEquals(3, BurningManService.findIndex(Longs.asList(0, 1, 0, 2, 3), 2)); - assertEquals(3, BurningManService.findIndex(Longs.asList(0, 0, 0, 1, 2, 3), 1)); - assertEquals(4, BurningManService.findIndex(Longs.asList(0, 0, 0, 1, 2, 3), 2)); - assertEquals(6, BurningManService.findIndex(Longs.asList(0, 0, 0, 1, 0, 0, 2, 3), 2)); - } } diff --git a/core/src/test/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverServiceTest.java b/core/src/test/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverServiceTest.java new file mode 100644 index 0000000000..d7247da422 --- /dev/null +++ b/core/src/test/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverServiceTest.java @@ -0,0 +1,44 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman; + + +import org.mockito.junit.MockitoJUnitRunner; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.assertEquals; + +@RunWith(MockitoJUnitRunner.class) +public class DelayedPayoutTxReceiverServiceTest { + @Test + public void testGetSnapshotHeight() { + assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 0, 10)); + assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 100, 10)); + assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 102, 10)); + assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 119, 10)); + assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 120, 10)); + assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 121, 10)); + assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 130, 10)); + assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 139, 10)); + assertEquals(130, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 140, 10)); + assertEquals(130, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 141, 10)); + assertEquals(990, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 1000, 10)); + } +} diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java index a89d99ce3a..38f9ca059c 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java @@ -30,7 +30,7 @@ import bisq.desktop.util.Layout; import bisq.desktop.util.validation.BsqValidator; import bisq.core.dao.DaoFacade; -import bisq.core.dao.burningman.BurningManService; +import bisq.core.dao.burningman.BurningManInfoService; import bisq.core.dao.governance.proofofburn.ProofOfBurnService; import bisq.core.dao.governance.proposal.TxException; import bisq.core.dao.state.DaoStateListener; @@ -89,7 +89,7 @@ import static bisq.desktop.util.FormBuilder.*; @FxmlView public class BurningmenView extends ActivatableView implements DaoStateListener { private final DaoFacade daoFacade; - private final BurningManService burningManService; + private final BurningManInfoService burningManInfoService; private final ProofOfBurnService proofOfBurnService; private final BsqFormatter bsqFormatter; private final CoinFormatter btcFormatter; @@ -132,13 +132,13 @@ public class BurningmenView extends ActivatableView implements @Inject private BurningmenView(DaoFacade daoFacade, - BurningManService burningManService, + BurningManInfoService burningManInfoService, ProofOfBurnService proofOfBurnService, BsqFormatter bsqFormatter, @Named(FormattingUtils.BTC_FORMATTER_KEY) CoinFormatter btcFormatter, BsqValidator bsqValidator) { this.daoFacade = daoFacade; - this.burningManService = burningManService; + this.burningManInfoService = burningManInfoService; this.proofOfBurnService = proofOfBurnService; this.bsqFormatter = bsqFormatter; this.btcFormatter = btcFormatter; @@ -410,19 +410,19 @@ public class BurningmenView extends ActivatableView implements /////////////////////////////////////////////////////////////////////////////////////////// private void updateData() { - burningmenObservableList.setAll(burningManService.getCurrentBurningManCandidatesByName().entrySet().stream() + burningmenObservableList.setAll(burningManInfoService.getCurrentBurningManCandidatesByName().entrySet().stream() .map(entry -> new BurningmenListItem(entry.getKey(), entry.getValue(), bsqFormatter)) .collect(Collectors.toList())); - reimbursementObservableList.setAll(burningManService.getCurrentReimbursements().stream() + reimbursementObservableList.setAll(burningManInfoService.getCurrentReimbursements().stream() .map(reimbursementModel -> new ReimbursementListItem(reimbursementModel, bsqFormatter)) .collect(Collectors.toList())); - expectedRevenueField.setText(bsqFormatter.formatCoinWithCode(burningManService.getAverageDistributionPerCycle())); - burnTargetField.setText(bsqFormatter.formatCoinWithCode(burningManService.getCurrentBurnTarget())); + expectedRevenueField.setText(bsqFormatter.formatCoinWithCode(burningManInfoService.getAverageDistributionPerCycle())); + burnTargetField.setText(bsqFormatter.formatCoinWithCode(burningManInfoService.getCurrentBurnTarget())); if (daoFacade.isParseBlockChainComplete()) { - Set myContributorNames = burningManService.getMyCompensationRequestNames(); - burningManService.findMyGenesisOutputNames().ifPresent(myContributorNames::addAll); + Set myContributorNames = burningManInfoService.getMyCompensationRequestNames(); + burningManInfoService.findMyGenesisOutputNames().ifPresent(myContributorNames::addAll); Map burningmenListItemByName = burningmenObservableList.stream() .collect(Collectors.toMap(BurningmenListItem::getName, e -> e)); From 40a03ebdc533ba8341a17c96acd338ed08a8f369 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Sun, 6 Nov 2022 12:49:12 -0500 Subject: [PATCH 19/86] Move getAverageDistributionPerCycle to BurningManService and use from BurningManInfoService. Remove reference to BurningManInfoService inside BurningManService. Signed-off-by: HenrikJannsen --- .../core/dao/burningman/BurningManInfoService.java | 8 +------- .../bisq/core/dao/burningman/BurningManService.java | 13 ++++++++----- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManInfoService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManInfoService.java index 683709d796..576dfdd604 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManInfoService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManInfoService.java @@ -62,9 +62,6 @@ public class BurningManInfoService implements DaoStateListener { this.burningManService = burningManService; daoStateService.addDaoStateListener(this); - - //todo - burningManService.setBurningManInfoService(this); } /////////////////////////////////////////////////////////////////////////////////////////// @@ -100,10 +97,7 @@ public class BurningManInfoService implements DaoStateListener { return averageDistributionPerCycle.get(); } - int fromBlock = burningManService.getFirstBlockOfPastCycle(currentChainHeight, 3); - long reimbursements = burningManService.getAccumulatedReimbursements(currentChainHeight, fromBlock); - long btcTradeFees = burningManService.getAccumulatedEstimatedBtcTradeFees(currentChainHeight, 3); - averageDistributionPerCycle = Optional.of(Math.round((reimbursements + btcTradeFees) / 3d)); + averageDistributionPerCycle = Optional.of(burningManService.getAverageDistributionPerCycle(currentChainHeight)); return averageDistributionPerCycle.get(); } diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index 2ea686e1ae..48a7910adf 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -104,9 +104,6 @@ public class BurningManService { // Burn target is calculated from reimbursements + estimated BTC fees - burned amounts. static final long BURN_TARGET_BOOST_AMOUNT = 10000000; - @Getter - @Setter - private BurningManInfoService burningManInfoService; @Getter @Setter private DelayedPayoutTxReceiverService delayedPayoutTxReceiverService; @@ -208,12 +205,18 @@ public class BurningManService { .sum(); long burnTarget = getBurnTarget(chainHeight, burningManCandidates); - //todo avoid burningManInfoService call burningManCandidates.forEach(candidate -> - candidate.calculateShare(totalDecayedCompensationAmounts, totalDecayedBurnAmounts, burnTarget, burningManInfoService.getAverageDistributionPerCycle())); + candidate.calculateShare(totalDecayedCompensationAmounts, totalDecayedBurnAmounts, burnTarget, getAverageDistributionPerCycle(chainHeight))); return burningManCandidatesByName; } + long getAverageDistributionPerCycle(int chainHeight) { + int fromBlock = getFirstBlockOfPastCycle(chainHeight, 3); + long reimbursements = getAccumulatedReimbursements(chainHeight, fromBlock); + long btcTradeFees = getAccumulatedEstimatedBtcTradeFees(chainHeight, 3); + return Math.round((reimbursements + btcTradeFees) / 3d); + } + private String getAddressFromCompensationRequest(Tx tx) { ImmutableList txOutputs = tx.getTxOutputs(); // The compensation request tx has usually 4 outputs. If there is no BTC change its 3 outputs. From 22f7b089f409e7109b9a552cd70c2d7d1419f38f Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Sun, 6 Nov 2022 13:07:50 -0500 Subject: [PATCH 20/86] Remove reference to delayedPayoutTxReceiverService and btcFeeReceiverService inside BurningManService. Use DelayedPayoutTxReceiverService and BtcFeeReceiverService in client code instead of BurningManService. Make BurningManService package private. --- .../dao/burningman/BtcFeeReceiverService.java | 4 +--- .../dao/burningman/BurningManService.java | 22 +------------------ .../DelayedPayoutTxReceiverService.java | 14 +++++++++--- .../bisq/core/offer/OpenOfferManager.java | 18 +++++++++------ .../availability/OfferAvailabilityModel.java | 8 +++---- .../tasks/SendOfferAvailabilityRequest.java | 2 +- .../placeoffer/bisq_v1/PlaceOfferModel.java | 8 +++---- .../bisq_v1/tasks/CreateMakerFeeTx.java | 2 +- .../support/dispute/refund/RefundManager.java | 10 ++++----- .../java/bisq/core/trade/TradeManager.java | 2 +- .../bisq/core/trade/protocol/Provider.java | 12 ++++++---- .../protocol/bisq_v1/model/ProcessModel.java | 11 +++++++--- .../BuyerVerifiesFinalDelayedPayoutTx.java | 6 ++--- .../BuyerVerifiesPreparedDelayedPayoutTx.java | 6 ++--- ...kerProcessesInputsForDepositTxRequest.java | 6 ++--- .../seller/SellerCreatesDelayedPayoutTx.java | 6 ++--- .../bisq_v1/tasks/taker/CreateTakerFeeTx.java | 2 +- .../TakerSendInputsForDepositTxRequest.java | 2 +- .../bisq/core/offer/OpenOfferManagerTest.java | 3 +++ 19 files changed, 73 insertions(+), 71 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java index 5d4e673ead..c10a530c0e 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java @@ -44,11 +44,9 @@ public class BtcFeeReceiverService implements DaoStateListener { this.burningManService = burningManService; daoStateService.addDaoStateListener(this); - - //todo - burningManService.setBtcFeeReceiverService(this); } + /////////////////////////////////////////////////////////////////////////////////////////// // DaoStateListener /////////////////////////////////////////////////////////////////////////////////////////// diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index 48a7910adf..9b20fca384 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -35,7 +35,6 @@ import bisq.core.dao.state.model.governance.ReimbursementProposal; import bisq.network.p2p.storage.P2PDataStorage; import bisq.common.util.Hex; -import bisq.common.util.Utilities; import javax.inject.Inject; import javax.inject.Singleton; @@ -45,8 +44,6 @@ import com.google.common.base.Charsets; import com.google.common.collect.ImmutableList; import java.util.Collection; -import java.util.Date; -import java.util.GregorianCalendar; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -55,16 +52,11 @@ import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; -import lombok.Getter; -import lombok.Setter; import lombok.extern.slf4j.Slf4j; @Slf4j @Singleton -public class BurningManService { - // TODO - // public static final Date ACTIVATION_DATE = Utilities.getUTCDate(2022, GregorianCalendar.OCTOBER, 25); - public static final Date ACTIVATION_DATE = Utilities.getUTCDate(2023, GregorianCalendar.JANUARY, 1); +class BurningManService { private static final int DAY_AS_BLOCKS = 144; private static final int MONTH_AS_BLOCKS = 30 * DAY_AS_BLOCKS; // Ignore 31 days months, as the block time is anyway not exact. private static final int YEAR_AS_BLOCKS = 12 * MONTH_AS_BLOCKS; @@ -104,18 +96,6 @@ public class BurningManService { // Burn target is calculated from reimbursements + estimated BTC fees - burned amounts. static final long BURN_TARGET_BOOST_AMOUNT = 10000000; - @Getter - @Setter - private DelayedPayoutTxReceiverService delayedPayoutTxReceiverService; - @Getter - @Setter - private BtcFeeReceiverService btcFeeReceiverService; - - - public static boolean isActivated() { - return new Date().after(ACTIVATION_DATE); - } - private final DaoStateService daoStateService; private final CycleService cycleService; private final ProposalService proposalService; diff --git a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java index 9b097bc6a4..7b0d3c316e 100644 --- a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java +++ b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java @@ -22,6 +22,7 @@ import bisq.core.dao.state.DaoStateService; import bisq.core.dao.state.model.blockchain.Block; import bisq.common.util.Tuple2; +import bisq.common.util.Utilities; import javax.inject.Inject; import javax.inject.Singleton; @@ -30,11 +31,16 @@ import com.google.common.annotations.VisibleForTesting; import java.util.Collection; import java.util.Comparator; +import java.util.Date; +import java.util.GregorianCalendar; import java.util.List; import java.util.stream.Collectors; @Singleton public class DelayedPayoutTxReceiverService implements DaoStateListener { + // TODO + // public static final Date ACTIVATION_DATE = Utilities.getUTCDate(2022, GregorianCalendar.OCTOBER, 25); + public static final Date ACTIVATION_DATE = Utilities.getUTCDate(2023, GregorianCalendar.JANUARY, 1); // One part of the limit for the min. amount to be included in the DPT outputs. // The miner fee rate multiplied by 2 times the output size is the other factor. @@ -53,6 +59,10 @@ public class DelayedPayoutTxReceiverService implements DaoStateListener { // spike when opening arbitration. private static final long DPT_MIN_TX_FEE_RATE = 10; + public static boolean isActivated() { + return new Date().after(ACTIVATION_DATE); + } + private final DaoStateService daoStateService; private final BurningManService burningManService; @@ -64,11 +74,9 @@ public class DelayedPayoutTxReceiverService implements DaoStateListener { this.burningManService = burningManService; daoStateService.addDaoStateListener(this); - - //todo - burningManService.setDelayedPayoutTxReceiverService(this); } + /////////////////////////////////////////////////////////////////////////////////////////// // DaoStateListener /////////////////////////////////////////////////////////////////////////////////////////// diff --git a/core/src/main/java/bisq/core/offer/OpenOfferManager.java b/core/src/main/java/bisq/core/offer/OpenOfferManager.java index 1174d68888..6f90133091 100644 --- a/core/src/main/java/bisq/core/offer/OpenOfferManager.java +++ b/core/src/main/java/bisq/core/offer/OpenOfferManager.java @@ -22,7 +22,8 @@ import bisq.core.btc.wallet.BsqWalletService; import bisq.core.btc.wallet.BtcWalletService; import bisq.core.btc.wallet.TradeWalletService; import bisq.core.dao.DaoFacade; -import bisq.core.dao.burningman.BurningManService; +import bisq.core.dao.burningman.BtcFeeReceiverService; +import bisq.core.dao.burningman.DelayedPayoutTxReceiverService; import bisq.core.exceptions.TradePriceOutOfToleranceException; import bisq.core.filter.FilterManager; import bisq.core.locale.Res; @@ -123,7 +124,8 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe private final RefundAgentManager refundAgentManager; private final DaoFacade daoFacade; private final FilterManager filterManager; - private final BurningManService burningManService; + private final BtcFeeReceiverService btcFeeReceiverService; + private final DelayedPayoutTxReceiverService delayedPayoutTxReceiverService; private final Broadcaster broadcaster; private final PersistenceManager> persistenceManager; private final Map offersToBeEdited = new HashMap<>(); @@ -157,7 +159,8 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe RefundAgentManager refundAgentManager, DaoFacade daoFacade, FilterManager filterManager, - BurningManService burningManService, + BtcFeeReceiverService btcFeeReceiverService, + DelayedPayoutTxReceiverService delayedPayoutTxReceiverService, Broadcaster broadcaster, PersistenceManager> persistenceManager) { this.coreContext = coreContext; @@ -178,7 +181,8 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe this.refundAgentManager = refundAgentManager; this.daoFacade = daoFacade; this.filterManager = filterManager; - this.burningManService = burningManService; + this.btcFeeReceiverService = btcFeeReceiverService; + this.delayedPayoutTxReceiverService = delayedPayoutTxReceiverService; this.broadcaster = broadcaster; this.persistenceManager = persistenceManager; @@ -393,7 +397,7 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe arbitratorManager, tradeStatisticsManager, daoFacade, - burningManService, + btcFeeReceiverService, user, filterManager); PlaceOfferProtocol placeOfferProtocol = new PlaceOfferProtocol( @@ -668,12 +672,12 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe return; } - if (BurningManService.isActivated()) { + if (DelayedPayoutTxReceiverService.isActivated()) { try { int takersBurningManSelectionHeight = request.getBurningManSelectionHeight(); checkArgument(takersBurningManSelectionHeight > 0, "takersBurningManSelectionHeight must not be 0"); - int makersBurningManSelectionHeight = burningManService.getDelayedPayoutTxReceiverService().getBurningManSelectionHeight(); + int makersBurningManSelectionHeight = delayedPayoutTxReceiverService.getBurningManSelectionHeight(); checkArgument(takersBurningManSelectionHeight == makersBurningManSelectionHeight, "takersBurningManSelectionHeight does no match makersBurningManSelectionHeight"); } catch (Throwable t) { diff --git a/core/src/main/java/bisq/core/offer/availability/OfferAvailabilityModel.java b/core/src/main/java/bisq/core/offer/availability/OfferAvailabilityModel.java index 0547b8a188..3e93f82a54 100644 --- a/core/src/main/java/bisq/core/offer/availability/OfferAvailabilityModel.java +++ b/core/src/main/java/bisq/core/offer/availability/OfferAvailabilityModel.java @@ -17,7 +17,7 @@ package bisq.core.offer.availability; -import bisq.core.dao.burningman.BurningManService; +import bisq.core.dao.burningman.DelayedPayoutTxReceiverService; import bisq.core.offer.Offer; import bisq.core.offer.availability.messages.OfferAvailabilityResponse; import bisq.core.support.dispute.mediation.mediator.MediatorManager; @@ -73,7 +73,7 @@ public class OfferAvailabilityModel implements Model { // Added in v 1.9.7 @Getter - private final BurningManService burningManService; + private final DelayedPayoutTxReceiverService delayedPayoutTxReceiverService; public OfferAvailabilityModel(Offer offer, PubKeyRing pubKeyRing, @@ -81,7 +81,7 @@ public class OfferAvailabilityModel implements Model { User user, MediatorManager mediatorManager, TradeStatisticsManager tradeStatisticsManager, - BurningManService burningManService, + DelayedPayoutTxReceiverService delayedPayoutTxReceiverService, boolean isTakerApiUser) { this.offer = offer; this.pubKeyRing = pubKeyRing; @@ -89,7 +89,7 @@ public class OfferAvailabilityModel implements Model { this.user = user; this.mediatorManager = mediatorManager; this.tradeStatisticsManager = tradeStatisticsManager; - this.burningManService = burningManService; + this.delayedPayoutTxReceiverService = delayedPayoutTxReceiverService; this.isTakerApiUser = isTakerApiUser; } diff --git a/core/src/main/java/bisq/core/offer/availability/tasks/SendOfferAvailabilityRequest.java b/core/src/main/java/bisq/core/offer/availability/tasks/SendOfferAvailabilityRequest.java index 450122bdd2..bbe2c8ea74 100644 --- a/core/src/main/java/bisq/core/offer/availability/tasks/SendOfferAvailabilityRequest.java +++ b/core/src/main/java/bisq/core/offer/availability/tasks/SendOfferAvailabilityRequest.java @@ -39,7 +39,7 @@ public class SendOfferAvailabilityRequest extends Task { try { runInterceptHook(); - int burningManSelectionHeight = model.getBurningManService().getDelayedPayoutTxReceiverService().getBurningManSelectionHeight(); + int burningManSelectionHeight = model.getDelayedPayoutTxReceiverService().getBurningManSelectionHeight(); OfferAvailabilityRequest message = new OfferAvailabilityRequest(model.getOffer().getId(), model.getPubKeyRing(), model.getTakersTradePrice(), diff --git a/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/PlaceOfferModel.java b/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/PlaceOfferModel.java index a9bfad00ba..0b44a8b649 100644 --- a/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/PlaceOfferModel.java +++ b/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/PlaceOfferModel.java @@ -21,7 +21,7 @@ import bisq.core.btc.wallet.BsqWalletService; import bisq.core.btc.wallet.BtcWalletService; import bisq.core.btc.wallet.TradeWalletService; import bisq.core.dao.DaoFacade; -import bisq.core.dao.burningman.BurningManService; +import bisq.core.dao.burningman.BtcFeeReceiverService; import bisq.core.filter.FilterManager; import bisq.core.offer.Offer; import bisq.core.offer.OfferBookService; @@ -52,7 +52,7 @@ public class PlaceOfferModel implements Model { private final ArbitratorManager arbitratorManager; private final TradeStatisticsManager tradeStatisticsManager; private final DaoFacade daoFacade; - private final BurningManService burningManService; + private final BtcFeeReceiverService btcFeeReceiverService; private final User user; @Getter private final FilterManager filterManager; @@ -73,7 +73,7 @@ public class PlaceOfferModel implements Model { ArbitratorManager arbitratorManager, TradeStatisticsManager tradeStatisticsManager, DaoFacade daoFacade, - BurningManService burningManService, + BtcFeeReceiverService btcFeeReceiverService, User user, FilterManager filterManager) { this.offer = offer; @@ -86,7 +86,7 @@ public class PlaceOfferModel implements Model { this.arbitratorManager = arbitratorManager; this.tradeStatisticsManager = tradeStatisticsManager; this.daoFacade = daoFacade; - this.burningManService = burningManService; + this.btcFeeReceiverService = btcFeeReceiverService; this.user = user; this.filterManager = filterManager; } diff --git a/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/tasks/CreateMakerFeeTx.java b/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/tasks/CreateMakerFeeTx.java index eb915cb488..6a8df4d224 100644 --- a/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/tasks/CreateMakerFeeTx.java +++ b/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/tasks/CreateMakerFeeTx.java @@ -66,7 +66,7 @@ public class CreateMakerFeeTx extends Task { TradeWalletService tradeWalletService = model.getTradeWalletService(); if (offer.isCurrencyForMakerFeeBtc()) { - String feeReceiver = model.getBurningManService().getBtcFeeReceiverService().getBtcFeeReceiverAddress(); + String feeReceiver = model.getBtcFeeReceiverService().getBtcFeeReceiverAddress(); tradeWalletService.createBtcTradingFeeTx( fundingAddress, reservedForTradeAddress, diff --git a/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java b/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java index 9c7d83e6b9..87cac667f5 100644 --- a/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java +++ b/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java @@ -21,7 +21,7 @@ import bisq.core.btc.setup.WalletsSetup; import bisq.core.btc.wallet.BtcWalletService; import bisq.core.btc.wallet.TradeWalletService; import bisq.core.dao.DaoFacade; -import bisq.core.dao.burningman.BurningManService; +import bisq.core.dao.burningman.DelayedPayoutTxReceiverService; import bisq.core.locale.Res; import bisq.core.offer.OpenOffer; import bisq.core.offer.OpenOfferManager; @@ -77,7 +77,7 @@ import static com.google.common.base.Preconditions.checkNotNull; @Slf4j @Singleton public final class RefundManager extends DisputeManager { - private final BurningManService burningManService; + private final DelayedPayoutTxReceiverService delayedPayoutTxReceiverService; private final MempoolService mempoolService; @@ -94,7 +94,7 @@ public final class RefundManager extends DisputeManager { ClosedTradableManager closedTradableManager, OpenOfferManager openOfferManager, DaoFacade daoFacade, - BurningManService burningManService, + DelayedPayoutTxReceiverService delayedPayoutTxReceiverService, KeyRing keyRing, RefundDisputeListService refundDisputeListService, Config config, @@ -102,8 +102,8 @@ public final class RefundManager extends DisputeManager { MempoolService mempoolService) { super(p2PService, tradeWalletService, walletService, walletsSetup, tradeManager, closedTradableManager, openOfferManager, daoFacade, keyRing, refundDisputeListService, config, priceFeedService); + this.delayedPayoutTxReceiverService = delayedPayoutTxReceiverService; - this.burningManService = burningManService; this.mempoolService = mempoolService; } @@ -319,7 +319,7 @@ public final class RefundManager extends DisputeManager { public void verifyDelayedPayoutTxReceivers(Transaction delayedPayoutTx, Dispute dispute) { Transaction depositTx = dispute.findDepositTx(btcWalletService).orElseThrow(); long inputAmount = depositTx.getOutput(0).getValue().value; - List> delayedPayoutTxReceivers = burningManService.getDelayedPayoutTxReceiverService().getDelayedPayoutTxReceivers( + List> delayedPayoutTxReceivers = delayedPayoutTxReceiverService.getDelayedPayoutTxReceivers( dispute.getBurningManSelectionHeight(), inputAmount, dispute.getTradeTxFee()); diff --git a/core/src/main/java/bisq/core/trade/TradeManager.java b/core/src/main/java/bisq/core/trade/TradeManager.java index ce88e0ac8f..208a650e6e 100644 --- a/core/src/main/java/bisq/core/trade/TradeManager.java +++ b/core/src/main/java/bisq/core/trade/TradeManager.java @@ -644,7 +644,7 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi user, mediatorManager, tradeStatisticsManager, - provider.getBurningManService(), + provider.getDelayedPayoutTxReceiverService(), isTakerApiUser); } diff --git a/core/src/main/java/bisq/core/trade/protocol/Provider.java b/core/src/main/java/bisq/core/trade/protocol/Provider.java index 13536373eb..d745e1868f 100644 --- a/core/src/main/java/bisq/core/trade/protocol/Provider.java +++ b/core/src/main/java/bisq/core/trade/protocol/Provider.java @@ -23,7 +23,8 @@ import bisq.core.btc.wallet.BtcWalletService; import bisq.core.btc.wallet.TradeWalletService; import bisq.core.btc.wallet.WalletsManager; import bisq.core.dao.DaoFacade; -import bisq.core.dao.burningman.BurningManService; +import bisq.core.dao.burningman.BtcFeeReceiverService; +import bisq.core.dao.burningman.DelayedPayoutTxReceiverService; import bisq.core.filter.FilterManager; import bisq.core.offer.OpenOfferManager; import bisq.core.provider.fee.FeeService; @@ -61,7 +62,8 @@ public class Provider { private final RefundAgentManager refundAgentManager; private final KeyRing keyRing; private final FeeService feeService; - private final BurningManService burningManService; + private final BtcFeeReceiverService btcFeeReceiverService; + private final DelayedPayoutTxReceiverService delayedPayoutTxReceiverService; @Inject public Provider(OpenOfferManager openOfferManager, @@ -81,7 +83,8 @@ public class Provider { RefundAgentManager refundAgentManager, KeyRing keyRing, FeeService feeService, - BurningManService burningManService) { + BtcFeeReceiverService btcFeeReceiverService, + DelayedPayoutTxReceiverService delayedPayoutTxReceiverService) { this.openOfferManager = openOfferManager; this.p2PService = p2PService; @@ -100,6 +103,7 @@ public class Provider { this.refundAgentManager = refundAgentManager; this.keyRing = keyRing; this.feeService = feeService; - this.burningManService = burningManService; + this.btcFeeReceiverService = btcFeeReceiverService; + this.delayedPayoutTxReceiverService = delayedPayoutTxReceiverService; } } diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/model/ProcessModel.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/model/ProcessModel.java index 6baa603d50..3436c09595 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/model/ProcessModel.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/model/ProcessModel.java @@ -23,7 +23,8 @@ import bisq.core.btc.wallet.BsqWalletService; import bisq.core.btc.wallet.BtcWalletService; import bisq.core.btc.wallet.TradeWalletService; import bisq.core.dao.DaoFacade; -import bisq.core.dao.burningman.BurningManService; +import bisq.core.dao.burningman.BtcFeeReceiverService; +import bisq.core.dao.burningman.DelayedPayoutTxReceiverService; import bisq.core.filter.FilterManager; import bisq.core.network.MessageState; import bisq.core.offer.Offer; @@ -385,8 +386,12 @@ public class ProcessModel implements ProtocolModel { return provider.getTradeWalletService(); } - public BurningManService getBurningManService() { - return provider.getBurningManService(); + public BtcFeeReceiverService getBtcFeeReceiverService() { + return provider.getBtcFeeReceiverService(); + } + + public DelayedPayoutTxReceiverService getDelayedPayoutTxReceiverService() { + return provider.getDelayedPayoutTxReceiverService(); } public User getUser() { diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java index 009add5ecc..cad780cc5f 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java @@ -18,7 +18,7 @@ package bisq.core.trade.protocol.bisq_v1.tasks.buyer; import bisq.core.btc.wallet.BtcWalletService; -import bisq.core.dao.burningman.BurningManService; +import bisq.core.dao.burningman.DelayedPayoutTxReceiverService; import bisq.core.trade.bisq_v1.TradeDataValidation; import bisq.core.trade.model.bisq_v1.Trade; import bisq.core.trade.protocol.bisq_v1.tasks.TradeTask; @@ -60,10 +60,10 @@ public class BuyerVerifiesFinalDelayedPayoutTx extends TradeTask { // Now as we know the deposit tx we can also verify the input TradeDataValidation.validatePayoutTxInput(depositTx, finalDelayedPayoutTx); - if (BurningManService.isActivated()) { + if (DelayedPayoutTxReceiverService.isActivated()) { long inputAmount = depositTx.getOutput(0).getValue().value; long tradeTxFeeAsLong = trade.getTradeTxFeeAsLong(); - List> delayedPayoutTxReceivers = processModel.getBurningManService().getDelayedPayoutTxReceiverService().getDelayedPayoutTxReceivers( + List> delayedPayoutTxReceivers = processModel.getDelayedPayoutTxReceiverService().getDelayedPayoutTxReceivers( processModel.getBurningManSelectionHeight(), inputAmount, tradeTxFeeAsLong); diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesPreparedDelayedPayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesPreparedDelayedPayoutTx.java index 3351783d6f..38442a0c4f 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesPreparedDelayedPayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesPreparedDelayedPayoutTx.java @@ -18,7 +18,7 @@ package bisq.core.trade.protocol.bisq_v1.tasks.buyer; import bisq.core.btc.wallet.BtcWalletService; -import bisq.core.dao.burningman.BurningManService; +import bisq.core.dao.burningman.DelayedPayoutTxReceiverService; import bisq.core.trade.bisq_v1.TradeDataValidation; import bisq.core.trade.model.bisq_v1.Trade; import bisq.core.trade.protocol.bisq_v1.tasks.TradeTask; @@ -53,10 +53,10 @@ public class BuyerVerifiesPreparedDelayedPayoutTx extends TradeTask { btcWalletService); Transaction preparedDepositTx = btcWalletService.getTxFromSerializedTx(processModel.getPreparedDepositTx()); - if (BurningManService.isActivated()) { + if (DelayedPayoutTxReceiverService.isActivated()) { long inputAmount = preparedDepositTx.getOutput(0).getValue().value; long tradeTxFeeAsLong = trade.getTradeTxFeeAsLong(); - List> delayedPayoutTxReceivers = processModel.getBurningManService().getDelayedPayoutTxReceiverService().getDelayedPayoutTxReceivers( + List> delayedPayoutTxReceivers = processModel.getDelayedPayoutTxReceiverService().getDelayedPayoutTxReceivers( processModel.getBurningManSelectionHeight(), inputAmount, tradeTxFeeAsLong); diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/maker/MakerProcessesInputsForDepositTxRequest.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/maker/MakerProcessesInputsForDepositTxRequest.java index eb92f9c269..6628593e92 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/maker/MakerProcessesInputsForDepositTxRequest.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/maker/MakerProcessesInputsForDepositTxRequest.java @@ -17,7 +17,7 @@ package bisq.core.trade.protocol.bisq_v1.tasks.maker; -import bisq.core.dao.burningman.BurningManService; +import bisq.core.dao.burningman.DelayedPayoutTxReceiverService; import bisq.core.exceptions.TradePriceOutOfToleranceException; import bisq.core.offer.Offer; import bisq.core.support.dispute.mediation.mediator.Mediator; @@ -80,11 +80,11 @@ public class MakerProcessesInputsForDepositTxRequest extends TradeTask { tradingPeer.setAccountId(nonEmptyStringOf(request.getTakerAccountId())); - if (BurningManService.isActivated()) { + if (DelayedPayoutTxReceiverService.isActivated()) { int takersBurningManSelectionHeight = request.getBurningManSelectionHeight(); checkArgument(takersBurningManSelectionHeight > 0, "takersBurningManSelectionHeight must not be 0"); - int makersBurningManSelectionHeight = processModel.getBurningManService().getDelayedPayoutTxReceiverService().getBurningManSelectionHeight(); + int makersBurningManSelectionHeight = processModel.getDelayedPayoutTxReceiverService().getBurningManSelectionHeight(); checkArgument(takersBurningManSelectionHeight == makersBurningManSelectionHeight, "takersBurningManSelectionHeight does no match makersBurningManSelectionHeight"); processModel.setBurningManSelectionHeight(makersBurningManSelectionHeight); diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java index 84e983fc3b..9c28434885 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java @@ -18,7 +18,7 @@ package bisq.core.trade.protocol.bisq_v1.tasks.seller; import bisq.core.btc.wallet.TradeWalletService; -import bisq.core.dao.burningman.BurningManService; +import bisq.core.dao.burningman.DelayedPayoutTxReceiverService; import bisq.core.dao.governance.param.Param; import bisq.core.trade.bisq_v1.TradeDataValidation; import bisq.core.trade.model.bisq_v1.Trade; @@ -51,10 +51,10 @@ public class SellerCreatesDelayedPayoutTx extends TradeTask { TradeWalletService tradeWalletService = processModel.getTradeWalletService(); Transaction depositTx = checkNotNull(processModel.getDepositTx()); Transaction preparedDelayedPayoutTx; - if (BurningManService.isActivated()) { + if (DelayedPayoutTxReceiverService.isActivated()) { long inputAmount = depositTx.getOutput(0).getValue().value; long tradeTxFeeAsLong = trade.getTradeTxFeeAsLong(); - List> delayedPayoutTxReceivers = processModel.getBurningManService().getDelayedPayoutTxReceiverService().getDelayedPayoutTxReceivers( + List> delayedPayoutTxReceivers = processModel.getDelayedPayoutTxReceiverService().getDelayedPayoutTxReceivers( processModel.getBurningManSelectionHeight(), inputAmount, tradeTxFeeAsLong); diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/CreateTakerFeeTx.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/CreateTakerFeeTx.java index a1cdfc76f0..6a5881d0da 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/CreateTakerFeeTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/CreateTakerFeeTx.java @@ -65,7 +65,7 @@ public class CreateTakerFeeTx extends TradeTask { Transaction transaction; if (trade.isCurrencyForTakerFeeBtc()) { - String feeReceiver = processModel.getBurningManService().getBtcFeeReceiverService().getBtcFeeReceiverAddress(); + String feeReceiver = processModel.getBtcFeeReceiverService().getBtcFeeReceiverAddress(); transaction = tradeWalletService.createBtcTradingFeeTx( fundingAddress, reservedForTradeAddress, diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/TakerSendInputsForDepositTxRequest.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/TakerSendInputsForDepositTxRequest.java index deb3f55c30..a5df2116a9 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/TakerSendInputsForDepositTxRequest.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/TakerSendInputsForDepositTxRequest.java @@ -104,7 +104,7 @@ public class TakerSendInputsForDepositTxRequest extends TradeTask { byte[] signatureOfNonce = Sig.sign(processModel.getKeyRing().getSignatureKeyPair().getPrivate(), offerId.getBytes(Charsets.UTF_8)); - int burningManSelectionHeight = processModel.getBurningManService().getDelayedPayoutTxReceiverService().getBurningManSelectionHeight(); + int burningManSelectionHeight = processModel.getDelayedPayoutTxReceiverService().getBurningManSelectionHeight(); processModel.setBurningManSelectionHeight(burningManSelectionHeight); String takersPaymentMethodId = checkNotNull(processModel.getPaymentAccountPayload(trade)).getPaymentMethodId(); diff --git a/core/src/test/java/bisq/core/offer/OpenOfferManagerTest.java b/core/src/test/java/bisq/core/offer/OpenOfferManagerTest.java index 3a7c56a623..f662ef8aa9 100644 --- a/core/src/test/java/bisq/core/offer/OpenOfferManagerTest.java +++ b/core/src/test/java/bisq/core/offer/OpenOfferManagerTest.java @@ -68,6 +68,7 @@ public class OpenOfferManagerTest { null, null, null, + null, persistenceManager ); @@ -116,6 +117,7 @@ public class OpenOfferManagerTest { null, null, null, + null, persistenceManager ); @@ -156,6 +158,7 @@ public class OpenOfferManagerTest { null, null, null, + null, persistenceManager ); From 24ccacd210065e70663c3518985f35974f32039d Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Sun, 6 Nov 2022 13:14:18 -0500 Subject: [PATCH 21/86] Remove unused fields Signed-off-by: HenrikJannsen --- .../main/dao/burnbsq/burningmen/BurnOutputListItem.java | 5 +---- .../main/dao/burnbsq/burningmen/BurningmenListItem.java | 6 ++---- .../main/dao/burnbsq/burningmen/CompensationListItem.java | 6 +----- .../main/dao/burnbsq/burningmen/ReimbursementListItem.java | 3 --- 4 files changed, 4 insertions(+), 16 deletions(-) diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java index d1316c1334..04377bc2b6 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java @@ -30,19 +30,16 @@ import lombok.Getter; @Getter @EqualsAndHashCode class BurnOutputListItem { - private final BurnOutputModel burnOutputModel; - private final String dateAsString, txId, amountAsString, decayedAmountAsString; + private final String dateAsString, amountAsString, decayedAmountAsString; private final long date, amount, decayedAmount; private final int cycleIndex, height; BurnOutputListItem(BurnOutputModel model, BsqFormatter bsqFormatter) { - this.burnOutputModel = model; height = model.getHeight(); cycleIndex = model.getCycleIndex(); date = model.getDate(); dateAsString = DisplayUtils.formatDateTime(new Date(date)); - txId = model.getTxId(); amount = model.getAmount(); amountAsString = bsqFormatter.formatCoinWithCode(amount); decayedAmount = model.getDecayedAmount(); diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java index 11fba3ba9b..f78d1a7a62 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java @@ -29,13 +29,13 @@ import lombok.Getter; @EqualsAndHashCode class BurningmenListItem { private final BurningManCandidate burningManCandidate; - private final String name, address, burnOutputShareAsString, effectiveBurnOutputShareAsString, issuanceShareAsString, + private final String name, address, effectiveBurnOutputShareAsString, issuanceShareAsString, accumulatedDecayedBurnAmountAsBsq, allowedBurnAmountAsBsq, accumulatedBurnAmountAsBsq, accumulatedDecayedCompensationAmountAsBsq, accumulatedCompensationAmountAsBsq, expectedRevenueAsBsq; private final long allowedBurnAmount, accumulatedDecayedBurnAmount, accumulatedBurnAmount, accumulatedDecayedCompensationAmount, accumulatedCompensationAmount, expectedRevenue; private final int numBurnOutputs, numIssuances; - private final double burnOutputShare, effectiveBurnOutputShare, issuanceShare; + private final double effectiveBurnOutputShare, issuanceShare; BurningmenListItem(String name, BurningManCandidate burningManCandidate, BsqFormatter bsqFormatter) { this.burningManCandidate = burningManCandidate; @@ -50,8 +50,6 @@ class BurningmenListItem { accumulatedBurnAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedBurnAmount); accumulatedDecayedBurnAmount = burningManCandidate.getAccumulatedDecayedBurnAmount(); accumulatedDecayedBurnAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedDecayedBurnAmount); - burnOutputShare = burningManCandidate.getBurnOutputShare(); - burnOutputShareAsString = FormattingUtils.formatToPercentWithSymbol(burnOutputShare); effectiveBurnOutputShare = burningManCandidate.getEffectiveBurnOutputShare(); effectiveBurnOutputShareAsString = FormattingUtils.formatToPercentWithSymbol(effectiveBurnOutputShare); expectedRevenue = burningManCandidate.getExpectedRevenue(); diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java index 046a3c78b3..895205fba8 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java @@ -30,20 +30,16 @@ import lombok.Getter; @Getter @EqualsAndHashCode class CompensationListItem { - private final CompensationModel compensationModel; - private final String address, txId, amountAsString, decayedAmountAsString, dateAsString; + private final String amountAsString, decayedAmountAsString, dateAsString; private final long amount, decayedAmount, date; private final int height, cycleIndex; CompensationListItem(CompensationModel model, BsqFormatter bsqFormatter) { - this.compensationModel = model; height = model.getHeight(); cycleIndex = model.getCycleIndex(); date = model.getDate(); dateAsString = DisplayUtils.formatDateTime(new Date(date)); - txId = model.getTxId(); - address = model.getAddress(); amount = model.getAmount(); amountAsString = bsqFormatter.formatCoinWithCode(amount); decayedAmount = model.getDecayedAmount(); diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java index 20cdee820a..5116f28ef2 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java @@ -30,14 +30,11 @@ import lombok.Getter; @Getter @EqualsAndHashCode class ReimbursementListItem { - private final ReimbursementModel reimbursementModel; private final String amountAsString, dateAsString; private final long amount, date; private final int height, cycleIndex; ReimbursementListItem(ReimbursementModel model, BsqFormatter bsqFormatter) { - this.reimbursementModel = model; - height = model.getHeight(); cycleIndex = model.getCycleIndex(); date = model.getDate(); From 3fda9495268559bd3bd6a2e3caad2cef51a14d3b Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Sun, 6 Nov 2022 13:37:32 -0500 Subject: [PATCH 22/86] Add sorting for output index needed for genesis tx outputs. Use static factory methods for the 2 diff. use cases of CompensationModel. Signed-off-by: HenrikJannsen --- .../dao/burningman/BurningManCandidate.java | 5 +- .../dao/burningman/BurningManService.java | 5 +- .../dao/burningman/CompensationModel.java | 55 ++++++++++++++++--- 3 files changed, 55 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java b/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java index 45fd5c0895..109cba3e0e 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java @@ -63,7 +63,10 @@ public final class BurningManCandidate { } compensationModels.add(compensationModel); - compensationModels.sort(Comparator.comparing(CompensationModel::getTxId)); + // For genesis outputs we have same txId, so we use also output index to ensure deterministic sort order. + // For normal comp requests its Optional.empty. + compensationModels.sort(Comparator.comparing(CompensationModel::getTxId) + .thenComparing(model -> model.getOutputIndex().orElse(-1))); accumulatedDecayedCompensationAmount += compensationModel.getDecayedAmount(); accumulatedCompensationAmount += compensationModel.getAmount(); diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index 9b20fca384..a17891fc35 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -139,7 +139,7 @@ class BurningManService { if (isValidReimbursement(name, cycleIndex, issuanceAmount)) { long decayedIssuanceAmount = getDecayedCompensationAmount(issuanceAmount, issuanceHeight, chainHeight); long issuanceDate = daoStateService.getBlockTime(issuanceHeight); - candidate.addCompensationModel(new CompensationModel(address, + candidate.addCompensationModel(CompensationModel.fromCompensationRequest(address, issuanceAmount, decayedIssuanceAmount, issuanceHeight, @@ -166,11 +166,12 @@ class BurningManService { long issuanceAmount = txOutput.getValue(); long decayedAmount = getDecayedGenesisOutputAmount(issuanceAmount); long issuanceDate = daoStateService.getBlockTime(issuanceHeight); - candidate.addCompensationModel(new CompensationModel(txOutput.getAddress(), + candidate.addCompensationModel(CompensationModel.fromGenesisOutput(txOutput.getAddress(), issuanceAmount, decayedAmount, issuanceHeight, txOutput.getTxId(), + txOutput.getIndex(), issuanceDate, 0)); addBurnOutputModel(chainHeight, proofOfBurnOpReturnTxOutputByHash, name, candidate); diff --git a/core/src/main/java/bisq/core/dao/burningman/CompensationModel.java b/core/src/main/java/bisq/core/dao/burningman/CompensationModel.java index 331836bad8..cb21144791 100644 --- a/core/src/main/java/bisq/core/dao/burningman/CompensationModel.java +++ b/core/src/main/java/bisq/core/dao/burningman/CompensationModel.java @@ -18,6 +18,7 @@ package bisq.core.dao.burningman; import java.util.Date; +import java.util.Optional; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -25,26 +26,65 @@ import lombok.Getter; @Getter @EqualsAndHashCode public final class CompensationModel { + public static CompensationModel fromCompensationRequest(String address, + long amount, + long decayedAmount, + int height, + String txId, + long date, + int cycleIndex) { + return new CompensationModel(address, + amount, + decayedAmount, + height, + txId, + Optional.empty(), + date, + cycleIndex); + } + + public static CompensationModel fromGenesisOutput(String address, + long amount, + long decayedAmount, + int height, + String txId, + int outputIndex, + long date, + int cycleIndex) { + return new CompensationModel(address, + amount, + decayedAmount, + height, + txId, + Optional.of(outputIndex), + date, + cycleIndex); + } + + private final String address; private final long amount; private final long decayedAmount; private final int height; private final String txId; + private final Optional outputIndex; // Only set for genesis tx outputs as needed for sorting private final long date; private final int cycleIndex; - public CompensationModel(String address, - long amount, - long decayedAmount, - int height, - String txId, - long date, - int cycleIndex) { + private CompensationModel(String address, + long amount, + long decayedAmount, + int height, + String txId, + Optional outputIndex, + long date, + int cycleIndex) { this.address = address; this.amount = amount; this.decayedAmount = decayedAmount; this.height = height; this.txId = txId; + this.outputIndex = outputIndex; this.date = date; this.cycleIndex = cycleIndex; } @@ -57,6 +97,7 @@ public final class CompensationModel { ",\r\n decayedAmount=" + decayedAmount + ",\r\n height=" + height + ",\r\n txId='" + txId + '\'' + + ",\r\n outputIndex=" + outputIndex + ",\r\n date=" + new Date(date) + ",\r\n cycleIndex=" + cycleIndex + "\r\n }"; From ec25722d088c49b3bb059219a953ab1302bbc6fe Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Sun, 6 Nov 2022 15:43:50 -0500 Subject: [PATCH 23/86] Split up calculateShare into 4 distinct methods Reduce visibility to package scope Signed-off-by: HenrikJannsen --- .../core/dao/burningman/BurnOutputModel.java | 12 ++++---- .../dao/burningman/BurningManCandidate.java | 28 +++++++++-------- .../dao/burningman/BurningManService.java | 11 +++++-- .../dao/burningman/CompensationModel.java | 30 +++++++++---------- .../dao/burningman/ReimbursementModel.java | 8 ++--- 5 files changed, 49 insertions(+), 40 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurnOutputModel.java b/core/src/main/java/bisq/core/dao/burningman/BurnOutputModel.java index 458f7e5e26..a11d279cf8 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurnOutputModel.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurnOutputModel.java @@ -32,12 +32,12 @@ public final class BurnOutputModel { private final long date; private final int cycleIndex; - public BurnOutputModel(long amount, - long decayedAmount, - int height, - String txId, - long date, - int cycleIndex) { + BurnOutputModel(long amount, + long decayedAmount, + int height, + String txId, + long date, + int cycleIndex) { this.amount = amount; this.decayedAmount = decayedAmount; diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java b/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java index 109cba3e0e..cda8c29101 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java @@ -42,8 +42,9 @@ public final class BurningManCandidate { private double effectiveBurnOutputShare; // limited to boostedIssuanceShare private final List compensationModels = new ArrayList<>(); private final List burnOutputModels = new ArrayList<>(); + private Optional mostRecentAddress = Optional.empty(); - public BurningManCandidate() { + BurningManCandidate() { } public void addBurnOutputModel(BurnOutputModel burnOutputModel) { @@ -70,18 +71,27 @@ public final class BurningManCandidate { accumulatedDecayedCompensationAmount += compensationModel.getDecayedAmount(); accumulatedCompensationAmount += compensationModel.getAmount(); + + mostRecentAddress = compensationModels.stream() + .max(Comparator.comparing(CompensationModel::getHeight)) + .map(CompensationModel::getAddress); } - public void calculateShare(double totalIssuanceWeight, - double totalBurnOutputWeight, - long burnTarget, - long averageDistributionPerCycle) { + public void calculateIssuanceShare(double totalIssuanceWeight) { issuanceShare = totalIssuanceWeight > 0 ? accumulatedDecayedCompensationAmount / totalIssuanceWeight : 0; boostedIssuanceShare = issuanceShare * BurningManService.ISSUANCE_BOOST_FACTOR; + } + public void calculateBurnOutputShare(double totalBurnOutputWeight) { burnOutputShare = totalBurnOutputWeight > 0 ? accumulatedDecayedBurnAmount / totalBurnOutputWeight : 0; effectiveBurnOutputShare = Math.min(boostedIssuanceShare, burnOutputShare); + } + public void calculateExpectedRevenue(long averageDistributionPerCycle) { + expectedRevenue = Math.round(effectiveBurnOutputShare * averageDistributionPerCycle); + } + + public void calculateAllowedBurnAmount(long burnTarget) { double maxBurnAmount = burnTarget + BurningManService.BURN_TARGET_BOOST_AMOUNT; if (issuanceShare > 0 && maxBurnAmount > 0 && effectiveBurnOutputShare < boostedIssuanceShare) { // We reduce it with what he had already burned @@ -91,14 +101,6 @@ public final class BurningManCandidate { } else { allowedBurnAmount = 0; } - - expectedRevenue = Math.round(averageDistributionPerCycle * effectiveBurnOutputShare); - } - - public Optional getMostRecentAddress() { - return compensationModels.stream() - .max(Comparator.comparing(CompensationModel::getHeight)) - .map(CompensationModel::getAddress); } @Override diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index a17891fc35..cd49726e53 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -184,10 +184,17 @@ class BurningManService { double totalDecayedBurnAmounts = burningManCandidates.stream() .mapToDouble(BurningManCandidate::getAccumulatedDecayedBurnAmount) .sum(); + long averageDistributionPerCycle = getAverageDistributionPerCycle(chainHeight); long burnTarget = getBurnTarget(chainHeight, burningManCandidates); - burningManCandidates.forEach(candidate -> - candidate.calculateShare(totalDecayedCompensationAmounts, totalDecayedBurnAmounts, burnTarget, getAverageDistributionPerCycle(chainHeight))); + burningManCandidates.forEach(candidate -> { + candidate.calculateIssuanceShare(totalDecayedCompensationAmounts); + candidate.calculateBurnOutputShare(totalDecayedBurnAmounts); + candidate.calculateExpectedRevenue(averageDistributionPerCycle); + candidate.calculateAllowedBurnAmount(burnTarget); + } + ); + return burningManCandidatesByName; } diff --git a/core/src/main/java/bisq/core/dao/burningman/CompensationModel.java b/core/src/main/java/bisq/core/dao/burningman/CompensationModel.java index cb21144791..37b609bf06 100644 --- a/core/src/main/java/bisq/core/dao/burningman/CompensationModel.java +++ b/core/src/main/java/bisq/core/dao/burningman/CompensationModel.java @@ -26,13 +26,13 @@ import lombok.Getter; @Getter @EqualsAndHashCode public final class CompensationModel { - public static CompensationModel fromCompensationRequest(String address, - long amount, - long decayedAmount, - int height, - String txId, - long date, - int cycleIndex) { + static CompensationModel fromCompensationRequest(String address, + long amount, + long decayedAmount, + int height, + String txId, + long date, + int cycleIndex) { return new CompensationModel(address, amount, decayedAmount, @@ -43,14 +43,14 @@ public final class CompensationModel { cycleIndex); } - public static CompensationModel fromGenesisOutput(String address, - long amount, - long decayedAmount, - int height, - String txId, - int outputIndex, - long date, - int cycleIndex) { + static CompensationModel fromGenesisOutput(String address, + long amount, + long decayedAmount, + int height, + String txId, + int outputIndex, + long date, + int cycleIndex) { return new CompensationModel(address, amount, decayedAmount, diff --git a/core/src/main/java/bisq/core/dao/burningman/ReimbursementModel.java b/core/src/main/java/bisq/core/dao/burningman/ReimbursementModel.java index bb7f0f7843..ddb2da3257 100644 --- a/core/src/main/java/bisq/core/dao/burningman/ReimbursementModel.java +++ b/core/src/main/java/bisq/core/dao/burningman/ReimbursementModel.java @@ -30,10 +30,10 @@ public final class ReimbursementModel { private final long date; private final int cycleIndex; - public ReimbursementModel(long amount, - int height, - long date, - int cycleIndex) { + ReimbursementModel(long amount, + int height, + long date, + int cycleIndex) { this.amount = amount; this.height = height; this.date = date; From 508081ad16d9275ca22942f331452cc80d8d09c9 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Sun, 6 Nov 2022 16:01:27 -0500 Subject: [PATCH 24/86] Rearrange methods Signed-off-by: HenrikJannsen --- .../dao/burningman/BurningManService.java | 303 +++++++++--------- 1 file changed, 154 insertions(+), 149 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index cd49726e53..f011d2c733 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -111,11 +111,10 @@ class BurningManService { /////////////////////////////////////////////////////////////////////////////////////////// - // BurningManCandidates + // Package scope API /////////////////////////////////////////////////////////////////////////////////////////// - // Allows recreation of data model for the given chainHeight - public Map getBurningManCandidatesByName(int chainHeight) { + Map getBurningManCandidatesByName(int chainHeight) { Map burningManCandidatesByName = new HashMap<>(); Map> proofOfBurnOpReturnTxOutputByHash = getProofOfBurnOpReturnTxOutputByHash(chainHeight); @@ -123,9 +122,9 @@ class BurningManService { daoStateService.getIssuanceSetForType(IssuanceType.COMPENSATION).stream() .filter(issuance -> issuance.getChainHeight() <= chainHeight) .forEach(issuance -> { - getCompensationProposalsForIssuance(issuance).forEach(compensationProposal -> { - String name = compensationProposal.getName(); - burningManCandidatesByName.putIfAbsent(name, new BurningManCandidate()); + getCompensationProposalsForIssuance(issuance).forEach(compensationProposal -> { + String name = compensationProposal.getName(); + burningManCandidatesByName.putIfAbsent(name, new BurningManCandidate()); BurningManCandidate candidate = burningManCandidatesByName.get(name); // Issuance @@ -198,6 +197,46 @@ class BurningManService { return burningManCandidatesByName; } + Set getReimbursements(int chainHeight) { + Set reimbursements = new HashSet<>(); + daoStateService.getIssuanceSetForType(IssuanceType.REIMBURSEMENT).stream() + .filter(issuance -> issuance.getChainHeight() <= chainHeight) + .forEach(issuance -> getReimbursementProposalsForIssuance(issuance) + .forEach(reimbursementProposal -> { + int issuanceHeight = issuance.getChainHeight(); + long issuanceAmount = issuance.getAmount(); + long issuanceDate = daoStateService.getBlockTime(issuanceHeight); + int cycleIndex = getCycleIndex(issuanceHeight); + reimbursements.add(new ReimbursementModel( + issuanceAmount, + issuanceHeight, + issuanceDate, + cycleIndex)); + })); + return reimbursements; + } + + long getBurnTarget(int chainHeight, Collection burningManCandidates) { + int fromBlock = getFirstBlockOfPastCycle(chainHeight, NUM_REIMBURSEMENT_CYCLES); + long accumulatedReimbursements = getAccumulatedReimbursements(chainHeight, fromBlock); + long accumulatedEstimatedBtcTradeFees = getAccumulatedEstimatedBtcTradeFees(chainHeight, NUM_REIMBURSEMENT_CYCLES); + + // Legacy BurningMan + Set proofOfBurnTxs = getProofOfBurnTxs(chainHeight, fromBlock); + long burnedAmountFromLegacyBurningManDPT = getBurnedAmountFromLegacyBurningManDPT(proofOfBurnTxs); + long burnedAmountFromLegacyBurningMansBtcFees = getBurnedAmountFromLegacyBurningMansBtcFees(proofOfBurnTxs); + + // Distributed BurningMen + // burningManCandidates are already filtered with chainHeight + long burnedAmountFromBurningMen = getBurnedAmountFromBurningMen(burningManCandidates, fromBlock); + + return accumulatedReimbursements + + accumulatedEstimatedBtcTradeFees + - burnedAmountFromLegacyBurningManDPT + - burnedAmountFromLegacyBurningMansBtcFees + - burnedAmountFromBurningMen; + } + long getAverageDistributionPerCycle(int chainHeight) { int fromBlock = getFirstBlockOfPastCycle(chainHeight, 3); long reimbursements = getAccumulatedReimbursements(chainHeight, fromBlock); @@ -205,6 +244,37 @@ class BurningManService { return Math.round((reimbursements + btcTradeFees) / 3d); } + + /////////////////////////////////////////////////////////////////////////////////////////// + // Private + /////////////////////////////////////////////////////////////////////////////////////////// + + + /////////////////////////////////////////////////////////////////////////////////////////// + // BurningManCandidatesByName + /////////////////////////////////////////////////////////////////////////////////////////// + + private Map> getProofOfBurnOpReturnTxOutputByHash(int chainHeight) { + Map> map = new HashMap<>(); + daoStateService.getProofOfBurnOpReturnTxOutputs().stream() + .filter(txOutput -> txOutput.getBlockHeight() <= chainHeight) + .forEach(txOutput -> { + P2PDataStorage.ByteArray key = new P2PDataStorage.ByteArray(ProofOfBurnConsensus.getHashFromOpReturnData(txOutput.getOpReturnData())); + map.putIfAbsent(key, new HashSet<>()); + map.get(key).add(txOutput); + }); + return map; + } + + private Stream getCompensationProposalsForIssuance(Issuance issuance) { + return proposalService.getProposalPayloads().stream() + .map(ProposalPayload::getProposal) + .filter(proposal -> issuance.getTxId().equals(proposal.getTxId())) + .filter(proposal -> proposal instanceof CompensationProposal) + .map(proposal -> (CompensationProposal) proposal); + } + + private String getAddressFromCompensationRequest(Tx tx) { ImmutableList txOutputs = tx.getTxOutputs(); // The compensation request tx has usually 4 outputs. If there is no BTC change its 3 outputs. @@ -228,6 +298,11 @@ class BurningManService { } } + private int getCycleIndex(int height) { + return daoStateService.getCycle(height).map(cycleService::getCycleIndex).orElse(0); + } + + private boolean isValidReimbursement(String name, int cycleIndex, long issuanceAmount) { // Up to cycle 15 the RefundAgent made reimbursement requests as compensation requests. We filter out those entries. // As it is mixed with RefundAgents real compensation requests we take out all above 3500 BSQ. @@ -235,24 +310,32 @@ class BurningManService { return !isReimbursementOfRefundAgent; } - private Stream getCompensationProposalsForIssuance(Issuance issuance) { - return proposalService.getProposalPayloads().stream() - .map(ProposalPayload::getProposal) - .filter(proposal -> issuance.getTxId().equals(proposal.getTxId())) - .filter(proposal -> proposal instanceof CompensationProposal) - .map(proposal -> (CompensationProposal) proposal); + private long getDecayedCompensationAmount(long amount, int issuanceHeight, int chainHeight) { + return getDecayedAmount(amount, issuanceHeight, chainHeight, chainHeight - MAX_COMP_REQUEST_AGE, 0); } - private Map> getProofOfBurnOpReturnTxOutputByHash(int chainHeight) { - Map> map = new HashMap<>(); - daoStateService.getProofOfBurnOpReturnTxOutputs().stream() - .filter(txOutput -> txOutput.getBlockHeight() <= chainHeight) - .forEach(txOutput -> { - P2PDataStorage.ByteArray key = new P2PDataStorage.ByteArray(ProofOfBurnConsensus.getHashFromOpReturnData(txOutput.getOpReturnData())); - map.putIfAbsent(key, new HashSet<>()); - map.get(key).add(txOutput); - }); - return map; + // Linear decay between currentBlockHeight (100% of amount) and issuanceHeight (firstBlockOffset % of amount) + // Values below firstBlockHeight will use the firstBlockOffset as factor for the amount. + // E.g. if firstBlockOffset is 0.1 the decay goes to 10% and earlier values stay at 10%. + @VisibleForTesting + static long getDecayedAmount(long amount, + int issuanceHeight, + int currentBlockHeight, + int firstBlockHeight, + double firstBlockOffset) { + if (issuanceHeight > currentBlockHeight) + throw new IllegalArgumentException("issuanceHeight must not be larger than currentBlockHeight. issuanceHeight=" + issuanceHeight + "; currentBlockHeight=" + currentBlockHeight); + if (currentBlockHeight < 0) + throw new IllegalArgumentException("currentBlockHeight must not be negative. currentBlockHeight=" + currentBlockHeight); + if (amount < 0) + throw new IllegalArgumentException("amount must not be negative. amount" + amount); + if (issuanceHeight < 0) + throw new IllegalArgumentException("issuanceHeight must not be negative. issuanceHeight=" + issuanceHeight); + + double factor = Math.max(0, (issuanceHeight - firstBlockHeight) / (double) (currentBlockHeight - firstBlockHeight)); + double factorWithOffset = firstBlockOffset + factor * (1 - firstBlockOffset); + long weighted = Math.round(amount * factorWithOffset); + return Math.max(0, weighted); } private void addBurnOutputModel(int chainHeight, @@ -288,35 +371,56 @@ class BurningManService { } } - - /////////////////////////////////////////////////////////////////////////////////////////// - // Burn target, average distribution/cycle - /////////////////////////////////////////////////////////////////////////////////////////// - - - // Burn target using given chain height. Can be historical state. - public long getBurnTarget(int chainHeight, Collection burningManCandidates) { - int fromBlock = getFirstBlockOfPastCycle(chainHeight, NUM_REIMBURSEMENT_CYCLES); - long accumulatedReimbursements = getAccumulatedReimbursements(chainHeight, fromBlock); - long accumulatedEstimatedBtcTradeFees = getAccumulatedEstimatedBtcTradeFees(chainHeight, NUM_REIMBURSEMENT_CYCLES); - - // Legacy BurningMan - Set proofOfBurnTxs = getProofOfBurnTxs(chainHeight, fromBlock); - long burnedAmountFromLegacyBurningManDPT = getBurnedAmountFromLegacyBurningManDPT(proofOfBurnTxs); - long burnedAmountFromLegacyBurningMansBtcFees = getBurnedAmountFromLegacyBurningMansBtcFees(proofOfBurnTxs); - - // Distributed BurningMen - // burningManCandidates are already filtered with chainHeight - long burnedAmountFromBurningMen = getBurnedAmountFromBurningMen(burningManCandidates, fromBlock); - - return accumulatedReimbursements - + accumulatedEstimatedBtcTradeFees - - burnedAmountFromLegacyBurningManDPT - - burnedAmountFromLegacyBurningMansBtcFees - - burnedAmountFromBurningMen; + private long getDecayedBurnedAmount(long amount, int issuanceHeight, int chainHeight) { + return getDecayedAmount(amount, + issuanceHeight, + chainHeight, + chainHeight - MAX_BURN_AMOUNT_AGE, + 0); } - long getAccumulatedEstimatedBtcTradeFees(int chainHeight, int numCycles) { + private long getDecayedGenesisOutputAmount(long amount) { + return Math.round(amount * GENESIS_OUTPUT_AMOUNT_FACTOR); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Reimbursements + /////////////////////////////////////////////////////////////////////////////////////////// + + private Stream getReimbursementProposalsForIssuance(Issuance issuance) { + return proposalService.getProposalPayloads().stream() + .map(ProposalPayload::getProposal) + .filter(proposal -> issuance.getTxId().equals(proposal.getTxId())) + .filter(proposal -> proposal instanceof ReimbursementProposal) + .map(proposal -> (ReimbursementProposal) proposal); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Burn target + /////////////////////////////////////////////////////////////////////////////////////////// + + private int getFirstBlockOfPastCycle(int chainHeight, int numPastCycles) { + Optional optionalCycle = daoStateService.getCycle(chainHeight); + if (optionalCycle.isEmpty()) { + return 0; + } + + Cycle currentCycle = optionalCycle.get(); + return daoStateService.getPastCycle(currentCycle, numPastCycles) + .map(Cycle::getHeightOfFirstBlock) + .orElse(daoStateService.getGenesisBlockHeight()); + } + + private long getAccumulatedReimbursements(int chainHeight, int fromBlock) { + return getReimbursements(chainHeight).stream() + .filter(reimbursementModel -> reimbursementModel.getHeight() >= fromBlock) + .mapToLong(ReimbursementModel::getAmount) + .sum(); + } + + private long getAccumulatedEstimatedBtcTradeFees(int chainHeight, int numCycles) { Optional optionalCycle = daoStateService.getCycle(chainHeight); if (optionalCycle.isEmpty()) { return 0; @@ -344,18 +448,6 @@ class BurningManService { return value != 4320 ? value : DEFAULT_ESTIMATED_BTC_FEES; } - int getFirstBlockOfPastCycle(int chainHeight, int numPastCycles) { - Optional optionalCycle = daoStateService.getCycle(chainHeight); - if (optionalCycle.isEmpty()) { - return 0; - } - - Cycle currentCycle = optionalCycle.get(); - return daoStateService.getPastCycle(currentCycle, numPastCycles) - .map(Cycle::getHeightOfFirstBlock) - .orElse(daoStateService.getGenesisBlockHeight()); - } - private Set getProofOfBurnTxs(int chainHeight, int fromBlock) { return daoStateService.getProofOfBurnTxs().stream() .filter(tx -> tx.getBlockHeight() <= chainHeight) @@ -363,6 +455,7 @@ class BurningManService { .collect(Collectors.toSet()); } + private long getBurnedAmountFromLegacyBurningManDPT(Set proofOfBurnTxs) { // Burningman // Legacy burningman use those opReturn data to mark their burn transactions from delayed payout transaction cases. @@ -398,92 +491,4 @@ class BurningManService { .mapToLong(e -> e) .sum(); } - - - /////////////////////////////////////////////////////////////////////////////////////////// - // Reimbursements - /////////////////////////////////////////////////////////////////////////////////////////// - - Set getReimbursements(int chainHeight) { - Set reimbursements = new HashSet<>(); - daoStateService.getIssuanceSetForType(IssuanceType.REIMBURSEMENT).stream() - .filter(issuance -> issuance.getChainHeight() <= chainHeight) - .forEach(issuance -> getReimbursementProposalsForIssuance(issuance) - .forEach(reimbursementProposal -> { - int issuanceHeight = issuance.getChainHeight(); - long issuanceAmount = issuance.getAmount(); - long issuanceDate = daoStateService.getBlockTime(issuanceHeight); - int cycleIndex = getCycleIndex(issuanceHeight); - reimbursements.add(new ReimbursementModel( - issuanceAmount, - issuanceHeight, - issuanceDate, - cycleIndex)); - })); - return reimbursements; - } - - long getAccumulatedReimbursements(int chainHeight, int fromBlock) { - return getReimbursements(chainHeight).stream() - .filter(reimbursementModel -> reimbursementModel.getHeight() >= fromBlock) - .mapToLong(ReimbursementModel::getAmount) - .sum(); - } - - private Stream getReimbursementProposalsForIssuance(Issuance issuance) { - return proposalService.getProposalPayloads().stream() - .map(ProposalPayload::getProposal) - .filter(proposal -> issuance.getTxId().equals(proposal.getTxId())) - .filter(proposal -> proposal instanceof ReimbursementProposal) - .map(proposal -> (ReimbursementProposal) proposal); - } - - - /////////////////////////////////////////////////////////////////////////////////////////// - // Utils - /////////////////////////////////////////////////////////////////////////////////////////// - - private int getCycleIndex(int height) { - return daoStateService.getCycle(height).map(cycleService::getCycleIndex).orElse(0); - } - - private long getDecayedCompensationAmount(long amount, int issuanceHeight, int chainHeight) { - return getDecayedAmount(amount, issuanceHeight, chainHeight, chainHeight - MAX_COMP_REQUEST_AGE, 0); - } - - private long getDecayedGenesisOutputAmount(long amount) { - return Math.round(amount * GENESIS_OUTPUT_AMOUNT_FACTOR); - } - - private long getDecayedBurnedAmount(long amount, int issuanceHeight, int chainHeight) { - return getDecayedAmount(amount, - issuanceHeight, - chainHeight, - chainHeight - MAX_BURN_AMOUNT_AGE, - 0); - } - - // Linear decay between currentBlockHeight (100% of amount) and issuanceHeight (firstBlockOffset % of amount) - // Values below firstBlockHeight will use the firstBlockOffset as factor for the amount. - // E.g. if firstBlockOffset is 0.1 the decay goes to 10% and earlier values stay at 10%. - @VisibleForTesting - static long getDecayedAmount(long amount, - int issuanceHeight, - int currentBlockHeight, - int firstBlockHeight, - double firstBlockOffset) { - if (issuanceHeight > currentBlockHeight) - throw new IllegalArgumentException("issuanceHeight must not be larger than currentBlockHeight. issuanceHeight=" + issuanceHeight + "; currentBlockHeight=" + currentBlockHeight); - if (currentBlockHeight < 0) - throw new IllegalArgumentException("currentBlockHeight must not be negative. currentBlockHeight=" + currentBlockHeight); - if (amount < 0) - throw new IllegalArgumentException("amount must not be negative. amount" + amount); - if (issuanceHeight < 0) - throw new IllegalArgumentException("issuanceHeight must not be negative. issuanceHeight=" + issuanceHeight); - - double factor = Math.max(0, (issuanceHeight - firstBlockHeight) / (double) (currentBlockHeight - firstBlockHeight)); - double factorWithOffset = firstBlockOffset + factor * (1 - firstBlockOffset); - long weighted = Math.round(amount * factorWithOffset); - return Math.max(0, weighted); - } } From 92b38ed20fd574115dd858805845431d88dca11c Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Sun, 6 Nov 2022 16:06:38 -0500 Subject: [PATCH 25/86] Move BurningManUtil.getLegacyBurningManAddress to BurningManService. Remove BurningManUtil Signed-off-by: HenrikJannsen --- .../dao/burningman/BtcFeeReceiverService.java | 9 +++--- .../dao/burningman/BurningManService.java | 22 +++++++------ .../core/dao/burningman/BurningManUtil.java | 32 ------------------- .../DelayedPayoutTxReceiverService.java | 4 +-- 4 files changed, 19 insertions(+), 48 deletions(-) delete mode 100644 core/src/main/java/bisq/core/dao/burningman/BurningManUtil.java diff --git a/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java index c10a530c0e..a50e81af89 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java @@ -63,10 +63,9 @@ public class BtcFeeReceiverService implements DaoStateListener { public String getBtcFeeReceiverAddress() { Map burningManCandidatesByName = burningManService.getBurningManCandidatesByName(currentChainHeight); - int currentChainHeight = daoStateService.getBlockHeightOfLastBlock(); if (burningManCandidatesByName.isEmpty()) { // If there are no compensation requests (e.g. at dev testing) we fall back to the default address - return BurningManUtil.getLegacyBurningManAddress(daoStateService, currentChainHeight); + return burningManService.getLegacyBurningManAddress(currentChainHeight); } // It might be that we do not reach 100% if some entries had a capped effectiveBurnOutputShare. @@ -81,14 +80,14 @@ public class BtcFeeReceiverService implements DaoStateListener { .map(effectiveBurnOutputShare -> (long) Math.floor(effectiveBurnOutputShare * 10000)) .collect(Collectors.toList()); if (amountList.isEmpty()) { - return BurningManUtil.getLegacyBurningManAddress(daoStateService, currentChainHeight); + return burningManService.getLegacyBurningManAddress(currentChainHeight); } int winnerIndex = getRandomIndex(amountList, new Random()); if (winnerIndex == -1) { - return BurningManUtil.getLegacyBurningManAddress(daoStateService, currentChainHeight); + return burningManService.getLegacyBurningManAddress(currentChainHeight); } return burningManCandidates.get(winnerIndex).getMostRecentAddress() - .orElse(BurningManUtil.getLegacyBurningManAddress(daoStateService, currentChainHeight)); + .orElse(burningManService.getLegacyBurningManAddress(currentChainHeight)); } @VisibleForTesting diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index f011d2c733..3841976980 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -125,16 +125,16 @@ class BurningManService { getCompensationProposalsForIssuance(issuance).forEach(compensationProposal -> { String name = compensationProposal.getName(); burningManCandidatesByName.putIfAbsent(name, new BurningManCandidate()); - BurningManCandidate candidate = burningManCandidatesByName.get(name); + BurningManCandidate candidate = burningManCandidatesByName.get(name); - // Issuance - compensationProposal.getBurningManReceiverAddress() - .or(() -> daoStateService.getTx(compensationProposal.getTxId()) - .map(this::getAddressFromCompensationRequest)) - .ifPresent(address -> { - int issuanceHeight = issuance.getChainHeight(); - long issuanceAmount = getIssuanceAmountForCompensationRequest(issuance); - int cycleIndex = getCycleIndex(issuanceHeight); + // Issuance + compensationProposal.getBurningManReceiverAddress() + .or(() -> daoStateService.getTx(compensationProposal.getTxId()) + .map(this::getAddressFromCompensationRequest)) + .ifPresent(address -> { + int issuanceHeight = issuance.getChainHeight(); + long issuanceAmount = getIssuanceAmountForCompensationRequest(issuance); + int cycleIndex = getCycleIndex(issuanceHeight); if (isValidReimbursement(name, cycleIndex, issuanceAmount)) { long decayedIssuanceAmount = getDecayedCompensationAmount(issuanceAmount, issuanceHeight, chainHeight); long issuanceDate = daoStateService.getBlockTime(issuanceHeight); @@ -244,6 +244,10 @@ class BurningManService { return Math.round((reimbursements + btcTradeFees) / 3d); } + String getLegacyBurningManAddress(int chainHeight) { + return daoStateService.getParamValue(Param.RECIPIENT_BTC_ADDRESS, chainHeight); + } + /////////////////////////////////////////////////////////////////////////////////////////// // Private diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManUtil.java b/core/src/main/java/bisq/core/dao/burningman/BurningManUtil.java deleted file mode 100644 index 7d5fc5ff6b..0000000000 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManUtil.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * This file is part of Bisq. - * - * Bisq is free software: you can redistribute it and/or modify it - * under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at - * your option) any later version. - * - * Bisq is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public - * License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Bisq. If not, see . - */ - -package bisq.core.dao.burningman; - -import bisq.core.dao.governance.param.Param; -import bisq.core.dao.state.DaoStateService; - -public class BurningManUtil { - - /////////////////////////////////////////////////////////////////////////////////////////// - // Legacy BurningMan - /////////////////////////////////////////////////////////////////////////////////////////// - - public static String getLegacyBurningManAddress(DaoStateService daoStateService, int chainHeight) { - return daoStateService.getParamValue(Param.RECIPIENT_BTC_ADDRESS, chainHeight); - } -} diff --git a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java index 7b0d3c316e..610675b7b7 100644 --- a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java +++ b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java @@ -106,7 +106,7 @@ public class DelayedPayoutTxReceiverService implements DaoStateListener { Collection burningManCandidates = burningManService.getBurningManCandidatesByName(burningManSelectionHeight).values(); if (burningManCandidates.isEmpty()) { // If there are no compensation requests (e.g. at dev testing) we fall back to the legacy BM - return List.of(new Tuple2<>(inputAmount, BurningManUtil.getLegacyBurningManAddress(daoStateService, burningManSelectionHeight))); + return List.of(new Tuple2<>(inputAmount, burningManService.getLegacyBurningManAddress(burningManSelectionHeight))); } // We need to use the same txFeePerVbyte value for both traders. @@ -141,7 +141,7 @@ public class DelayedPayoutTxReceiverService implements DaoStateListener { // If the available is larger than DPT_MIN_REMAINDER_TO_LEGACY_BM we send it to legacy BM // Otherwise we use it as miner fee if (available > DPT_MIN_REMAINDER_TO_LEGACY_BM) { - receivers.add(new Tuple2<>(available, BurningManUtil.getLegacyBurningManAddress(daoStateService, burningManSelectionHeight))); + receivers.add(new Tuple2<>(available, burningManService.getLegacyBurningManAddress(burningManSelectionHeight))); } } return receivers; From 7724b5b3ea62af0007495bd2a58844fbfb1d4128 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Sun, 6 Nov 2022 16:10:33 -0500 Subject: [PATCH 26/86] Rename getBtcFeeReceiverAddress to getAddress Cleanup Signed-off-by: HenrikJannsen --- .../java/bisq/core/dao/burningman/BtcFeeReceiverService.java | 5 ++--- .../offer/placeoffer/bisq_v1/tasks/CreateMakerFeeTx.java | 2 +- .../trade/protocol/bisq_v1/tasks/taker/CreateTakerFeeTx.java | 2 +- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java index a50e81af89..6aeffd7455 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java @@ -34,13 +34,12 @@ import java.util.stream.Collectors; @Singleton public class BtcFeeReceiverService implements DaoStateListener { - private final DaoStateService daoStateService; private final BurningManService burningManService; + private int currentChainHeight; @Inject public BtcFeeReceiverService(DaoStateService daoStateService, BurningManService burningManService) { - this.daoStateService = daoStateService; this.burningManService = burningManService; daoStateService.addDaoStateListener(this); @@ -61,7 +60,7 @@ public class BtcFeeReceiverService implements DaoStateListener { // API /////////////////////////////////////////////////////////////////////////////////////////// - public String getBtcFeeReceiverAddress() { + public String getAddress() { Map burningManCandidatesByName = burningManService.getBurningManCandidatesByName(currentChainHeight); if (burningManCandidatesByName.isEmpty()) { // If there are no compensation requests (e.g. at dev testing) we fall back to the default address diff --git a/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/tasks/CreateMakerFeeTx.java b/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/tasks/CreateMakerFeeTx.java index 6a8df4d224..637fea6ab6 100644 --- a/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/tasks/CreateMakerFeeTx.java +++ b/core/src/main/java/bisq/core/offer/placeoffer/bisq_v1/tasks/CreateMakerFeeTx.java @@ -66,7 +66,7 @@ public class CreateMakerFeeTx extends Task { TradeWalletService tradeWalletService = model.getTradeWalletService(); if (offer.isCurrencyForMakerFeeBtc()) { - String feeReceiver = model.getBtcFeeReceiverService().getBtcFeeReceiverAddress(); + String feeReceiver = model.getBtcFeeReceiverService().getAddress(); tradeWalletService.createBtcTradingFeeTx( fundingAddress, reservedForTradeAddress, diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/CreateTakerFeeTx.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/CreateTakerFeeTx.java index 6a5881d0da..4b25c1199a 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/CreateTakerFeeTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/taker/CreateTakerFeeTx.java @@ -65,7 +65,7 @@ public class CreateTakerFeeTx extends TradeTask { Transaction transaction; if (trade.isCurrencyForTakerFeeBtc()) { - String feeReceiver = processModel.getBtcFeeReceiverService().getBtcFeeReceiverAddress(); + String feeReceiver = processModel.getBtcFeeReceiverService().getAddress(); transaction = tradeWalletService.createBtcTradingFeeTx( fundingAddress, reservedForTradeAddress, From f0faa44804d0673e1d33082007969d2b4ccaaea4 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Sun, 6 Nov 2022 16:14:04 -0500 Subject: [PATCH 27/86] Remove `Current` from method names Signed-off-by: HenrikJannsen --- .../bisq/core/dao/burningman/BurningManInfoService.java | 9 ++++----- .../main/dao/burnbsq/burningmen/BurningmenView.java | 6 +++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManInfoService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManInfoService.java index 576dfdd604..92e45dd303 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManInfoService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManInfoService.java @@ -48,7 +48,6 @@ public class BurningManInfoService implements DaoStateListener { private final Set reimbursements = new HashSet<>(); private Optional averageDistributionPerCycle = Optional.empty(); private Set myCompensationRequestNames; - private Optional> myGenesisOutputNames; @Inject @@ -83,12 +82,12 @@ public class BurningManInfoService implements DaoStateListener { // API /////////////////////////////////////////////////////////////////////////////////////////// - public long getCurrentBurnTarget() { + public long getBurnTarget() { if (burnTarget.isPresent()) { return burnTarget.get(); } - burnTarget = Optional.of(burningManService.getBurnTarget(currentChainHeight, getCurrentBurningManCandidatesByName().values())); + burnTarget = Optional.of(burningManService.getBurnTarget(currentChainHeight, getBurningManCandidatesByName().values())); return burnTarget.get(); } @@ -101,7 +100,7 @@ public class BurningManInfoService implements DaoStateListener { return averageDistributionPerCycle.get(); } - public Set getCurrentReimbursements() { + public Set getReimbursements() { if (!reimbursements.isEmpty()) { return reimbursements; } @@ -141,7 +140,7 @@ public class BurningManInfoService implements DaoStateListener { return myCompensationRequestNames; } - public Map getCurrentBurningManCandidatesByName() { + public Map getBurningManCandidatesByName() { // Cached value is only used for currentChainHeight if (!burningManCandidatesByName.isEmpty()) { return burningManCandidatesByName; diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java index 38f9ca059c..1c2598b5ee 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java @@ -410,15 +410,15 @@ public class BurningmenView extends ActivatableView implements /////////////////////////////////////////////////////////////////////////////////////////// private void updateData() { - burningmenObservableList.setAll(burningManInfoService.getCurrentBurningManCandidatesByName().entrySet().stream() + burningmenObservableList.setAll(burningManInfoService.getBurningManCandidatesByName().entrySet().stream() .map(entry -> new BurningmenListItem(entry.getKey(), entry.getValue(), bsqFormatter)) .collect(Collectors.toList())); - reimbursementObservableList.setAll(burningManInfoService.getCurrentReimbursements().stream() + reimbursementObservableList.setAll(burningManInfoService.getReimbursements().stream() .map(reimbursementModel -> new ReimbursementListItem(reimbursementModel, bsqFormatter)) .collect(Collectors.toList())); expectedRevenueField.setText(bsqFormatter.formatCoinWithCode(burningManInfoService.getAverageDistributionPerCycle())); - burnTargetField.setText(bsqFormatter.formatCoinWithCode(burningManInfoService.getCurrentBurnTarget())); + burnTargetField.setText(bsqFormatter.formatCoinWithCode(burningManInfoService.getBurnTarget())); if (daoFacade.isParseBlockChainComplete()) { Set myContributorNames = burningManInfoService.getMyCompensationRequestNames(); From 52d48eb90a60f7c5d30a7edf3e198b68a14a8f2b Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Sun, 6 Nov 2022 16:19:17 -0500 Subject: [PATCH 28/86] Rename getDelayedPayoutTxReceivers to getReceivers Cleanup Signed-off-by: HenrikJannsen --- .../burningman/DelayedPayoutTxReceiverService.java | 13 +++++++++---- .../core/support/dispute/refund/RefundManager.java | 2 +- .../buyer/BuyerVerifiesFinalDelayedPayoutTx.java | 2 +- .../buyer/BuyerVerifiesPreparedDelayedPayoutTx.java | 2 +- .../tasks/seller/SellerCreatesDelayedPayoutTx.java | 2 +- 5 files changed, 13 insertions(+), 8 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java index 610675b7b7..df489d8066 100644 --- a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java +++ b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java @@ -36,6 +36,12 @@ import java.util.GregorianCalendar; import java.util.List; import java.util.stream.Collectors; +/** + * Used in the trade protocol for creating and verifying the delayed payout transaction. + * Requires to be deterministic. + * Changes in the parameters related to the delayedPayoutTxReceivers list could break verification of the peers + * delayed payout transaction in case not both are using the same version. + */ @Singleton public class DelayedPayoutTxReceiverService implements DaoStateListener { // TODO @@ -91,7 +97,6 @@ public class DelayedPayoutTxReceiverService implements DaoStateListener { // API /////////////////////////////////////////////////////////////////////////////////////////// - // We use a snapshot blockHeight to avoid failed trades in case maker and taker have different block heights. // The selection is deterministic based on DAO data. // The block height is the last mod(10) height from the range of the last 10-20 blocks (139 -> 120; 140 -> 130, 141 -> 130). @@ -100,9 +105,9 @@ public class DelayedPayoutTxReceiverService implements DaoStateListener { return getSnapshotHeight(daoStateService.getGenesisBlockHeight(), currentChainHeight, 10); } - public List> getDelayedPayoutTxReceivers(int burningManSelectionHeight, - long inputAmount, - long tradeTxFee) { + public List> getReceivers(int burningManSelectionHeight, + long inputAmount, + long tradeTxFee) { Collection burningManCandidates = burningManService.getBurningManCandidatesByName(burningManSelectionHeight).values(); if (burningManCandidates.isEmpty()) { // If there are no compensation requests (e.g. at dev testing) we fall back to the legacy BM diff --git a/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java b/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java index 87cac667f5..fdb9748f82 100644 --- a/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java +++ b/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java @@ -319,7 +319,7 @@ public final class RefundManager extends DisputeManager { public void verifyDelayedPayoutTxReceivers(Transaction delayedPayoutTx, Dispute dispute) { Transaction depositTx = dispute.findDepositTx(btcWalletService).orElseThrow(); long inputAmount = depositTx.getOutput(0).getValue().value; - List> delayedPayoutTxReceivers = delayedPayoutTxReceiverService.getDelayedPayoutTxReceivers( + List> delayedPayoutTxReceivers = delayedPayoutTxReceiverService.getReceivers( dispute.getBurningManSelectionHeight(), inputAmount, dispute.getTradeTxFee()); diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java index cad780cc5f..f110fad2f2 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java @@ -63,7 +63,7 @@ public class BuyerVerifiesFinalDelayedPayoutTx extends TradeTask { if (DelayedPayoutTxReceiverService.isActivated()) { long inputAmount = depositTx.getOutput(0).getValue().value; long tradeTxFeeAsLong = trade.getTradeTxFeeAsLong(); - List> delayedPayoutTxReceivers = processModel.getDelayedPayoutTxReceiverService().getDelayedPayoutTxReceivers( + List> delayedPayoutTxReceivers = processModel.getDelayedPayoutTxReceiverService().getReceivers( processModel.getBurningManSelectionHeight(), inputAmount, tradeTxFeeAsLong); diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesPreparedDelayedPayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesPreparedDelayedPayoutTx.java index 38442a0c4f..7650ce8af0 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesPreparedDelayedPayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesPreparedDelayedPayoutTx.java @@ -56,7 +56,7 @@ public class BuyerVerifiesPreparedDelayedPayoutTx extends TradeTask { if (DelayedPayoutTxReceiverService.isActivated()) { long inputAmount = preparedDepositTx.getOutput(0).getValue().value; long tradeTxFeeAsLong = trade.getTradeTxFeeAsLong(); - List> delayedPayoutTxReceivers = processModel.getDelayedPayoutTxReceiverService().getDelayedPayoutTxReceivers( + List> delayedPayoutTxReceivers = processModel.getDelayedPayoutTxReceiverService().getReceivers( processModel.getBurningManSelectionHeight(), inputAmount, tradeTxFeeAsLong); diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java index 9c28434885..907946f9c7 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java @@ -54,7 +54,7 @@ public class SellerCreatesDelayedPayoutTx extends TradeTask { if (DelayedPayoutTxReceiverService.isActivated()) { long inputAmount = depositTx.getOutput(0).getValue().value; long tradeTxFeeAsLong = trade.getTradeTxFeeAsLong(); - List> delayedPayoutTxReceivers = processModel.getDelayedPayoutTxReceiverService().getDelayedPayoutTxReceivers( + List> delayedPayoutTxReceivers = processModel.getDelayedPayoutTxReceiverService().getReceivers( processModel.getBurningManSelectionHeight(), inputAmount, tradeTxFeeAsLong); From befe166bc704fd616b58a82a0829ac867b6b308b Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Sun, 6 Nov 2022 18:20:30 -0500 Subject: [PATCH 29/86] Refactor out fields from BurningManCandidate which are not affecting data for delayed payout tx receivers. This allows to split off the burn target related code to separate classes. Signed-off-by: HenrikJannsen --- .../dao/burningman/BtcFeeReceiverService.java | 2 +- .../dao/burningman/BurnTargetService.java | 231 ++++++++++++++++++ .../dao/burningman/BurningManCandidate.java | 66 ++--- ...ava => BurningManPresentationService.java} | 46 +++- .../dao/burningman/BurningManService.java | 221 ++--------------- .../dao/burningman/CompensationModel.java | 5 +- .../DelayedPayoutTxReceiverService.java | 6 +- .../burningmen/BurnOutputListItem.java | 3 +- .../burningmen/BurningmenListItem.java | 22 +- .../burnbsq/burningmen/BurningmenView.java | 32 +-- .../burningmen/CompensationListItem.java | 3 +- .../burningmen/ReimbursementListItem.java | 3 +- 12 files changed, 355 insertions(+), 285 deletions(-) create mode 100644 core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java rename core/src/main/java/bisq/core/dao/burningman/{BurningManInfoService.java => BurningManPresentationService.java} (71%) diff --git a/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java index 6aeffd7455..6b176cd4c7 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java @@ -75,7 +75,7 @@ public class BtcFeeReceiverService implements DaoStateListener { // Entries with 0 will be ignored in the selection method. List burningManCandidates = new ArrayList<>(burningManCandidatesByName.values()); List amountList = burningManCandidates.stream() - .map(BurningManCandidate::getEffectiveBurnOutputShare) + .map(BurningManCandidate::getCappedBurnAmountShare) .map(effectiveBurnOutputShare -> (long) Math.floor(effectiveBurnOutputShare * 10000)) .collect(Collectors.toList()); if (amountList.isEmpty()) { diff --git a/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java new file mode 100644 index 0000000000..3fd967c565 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java @@ -0,0 +1,231 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman; + +import bisq.core.dao.governance.param.Param; +import bisq.core.dao.governance.period.CycleService; +import bisq.core.dao.governance.proposal.ProposalService; +import bisq.core.dao.governance.proposal.storage.appendonly.ProposalPayload; +import bisq.core.dao.state.DaoStateService; +import bisq.core.dao.state.model.blockchain.Tx; +import bisq.core.dao.state.model.governance.Cycle; +import bisq.core.dao.state.model.governance.Issuance; +import bisq.core.dao.state.model.governance.IssuanceType; +import bisq.core.dao.state.model.governance.ReimbursementProposal; + +import bisq.common.util.Hex; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import lombok.extern.slf4j.Slf4j; + +/** + * Burn target related API. Not touching trade protocol aspects and parameters can be changed here without risking to + * break trade protocol validations. + */ +@Slf4j +@Singleton +class BurnTargetService { + // Number of cycles for accumulating reimbursement amounts. Used for the burn target. + private static final int NUM_REIMBURSEMENT_CYCLES = 12; + + // Default value for the estimated BTC trade fees per month as BSQ sat value (100 sat = 1 BSQ). + // Default is roughly average of last 12 months at Nov 2022. + // Can be changed with DAO parameter voting. + private static final long DEFAULT_ESTIMATED_BTC_FEES = 6200000; + + private final DaoStateService daoStateService; + private final CycleService cycleService; + private final ProposalService proposalService; + + @Inject + public BurnTargetService(DaoStateService daoStateService, + CycleService cycleService, + ProposalService proposalService) { + this.daoStateService = daoStateService; + this.cycleService = cycleService; + this.proposalService = proposalService; + } + + /////////////////////////////////////////////////////////////////////////////////////////// + // API + /////////////////////////////////////////////////////////////////////////////////////////// + + Set getReimbursements(int chainHeight) { + Set reimbursements = new HashSet<>(); + daoStateService.getIssuanceSetForType(IssuanceType.REIMBURSEMENT).stream() + .filter(issuance -> issuance.getChainHeight() <= chainHeight) + .forEach(issuance -> getReimbursementProposalsForIssuance(issuance) + .forEach(reimbursementProposal -> { + int issuanceHeight = issuance.getChainHeight(); + long issuanceAmount = issuance.getAmount(); + long issuanceDate = daoStateService.getBlockTime(issuanceHeight); + int cycleIndex = getCycleIndex(issuanceHeight); + reimbursements.add(new ReimbursementModel( + issuanceAmount, + issuanceHeight, + issuanceDate, + cycleIndex)); + })); + return reimbursements; + } + + long getBurnTarget(int chainHeight, Collection burningManCandidates) { + int fromBlock = getFirstBlockOfPastCycle(chainHeight, NUM_REIMBURSEMENT_CYCLES); + long accumulatedReimbursements = getAccumulatedReimbursements(chainHeight, fromBlock); + long accumulatedEstimatedBtcTradeFees = getAccumulatedEstimatedBtcTradeFees(chainHeight, NUM_REIMBURSEMENT_CYCLES); + + // Legacy BurningMan + Set proofOfBurnTxs = getProofOfBurnTxs(chainHeight, fromBlock); + long burnedAmountFromLegacyBurningManDPT = getBurnedAmountFromLegacyBurningManDPT(proofOfBurnTxs); + long burnedAmountFromLegacyBurningMansBtcFees = getBurnedAmountFromLegacyBurningMansBtcFees(proofOfBurnTxs); + + // Distributed BurningMen + // burningManCandidates are already filtered with chainHeight + long burnedAmountFromBurningMen = getBurnedAmountFromBurningMen(burningManCandidates, fromBlock); + + return accumulatedReimbursements + + accumulatedEstimatedBtcTradeFees + - burnedAmountFromLegacyBurningManDPT + - burnedAmountFromLegacyBurningMansBtcFees + - burnedAmountFromBurningMen; + } + + long getAverageDistributionPerCycle(int chainHeight) { + int fromBlock = getFirstBlockOfPastCycle(chainHeight, 3); + long reimbursements = getAccumulatedReimbursements(chainHeight, fromBlock); + long btcTradeFees = getAccumulatedEstimatedBtcTradeFees(chainHeight, 3); + return Math.round((reimbursements + btcTradeFees) / 3d); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Private + /////////////////////////////////////////////////////////////////////////////////////////// + + private Stream getReimbursementProposalsForIssuance(Issuance issuance) { + return proposalService.getProposalPayloads().stream() + .map(ProposalPayload::getProposal) + .filter(proposal -> issuance.getTxId().equals(proposal.getTxId())) + .filter(proposal -> proposal instanceof ReimbursementProposal) + .map(proposal -> (ReimbursementProposal) proposal); + } + + private int getCycleIndex(int height) { + return daoStateService.getCycle(height).map(cycleService::getCycleIndex).orElse(0); + } + + private int getFirstBlockOfPastCycle(int chainHeight, int numPastCycles) { + Optional optionalCycle = daoStateService.getCycle(chainHeight); + if (optionalCycle.isEmpty()) { + return 0; + } + + Cycle currentCycle = optionalCycle.get(); + return daoStateService.getPastCycle(currentCycle, numPastCycles) + .map(Cycle::getHeightOfFirstBlock) + .orElse(daoStateService.getGenesisBlockHeight()); + } + + private long getAccumulatedReimbursements(int chainHeight, int fromBlock) { + return getReimbursements(chainHeight).stream() + .filter(reimbursementModel -> reimbursementModel.getHeight() >= fromBlock) + .mapToLong(ReimbursementModel::getAmount) + .sum(); + } + + private long getAccumulatedEstimatedBtcTradeFees(int chainHeight, int numCycles) { + Optional optionalCycle = daoStateService.getCycle(chainHeight); + if (optionalCycle.isEmpty()) { + return 0; + } + long accumulatedEstimatedBtcTradeFees = 0; + Cycle candidateCycle = optionalCycle.get(); + for (int i = 0; i < numCycles; i++) { + // LOCK_TIME_TRADE_PAYOUT was never used. We re-purpose it as value for BTC fee revenue per cycle. This can be added as oracle data by DAO voting. + // We cannot change the ParamType to BSQ as that would break consensus + long estimatedBtcTradeFeesPerCycle = getBtcTradeFeeFromParam(candidateCycle); + accumulatedEstimatedBtcTradeFees += estimatedBtcTradeFeesPerCycle; + Optional previousCycle = daoStateService.getPreviousCycle(candidateCycle); + if (previousCycle.isPresent()) { + candidateCycle = previousCycle.get(); + } else { + break; + } + } + return accumulatedEstimatedBtcTradeFees; + } + + private long getBtcTradeFeeFromParam(Cycle cycle) { + int value = daoStateService.getParamValueAsBlock(Param.LOCK_TIME_TRADE_PAYOUT, cycle.getHeightOfFirstBlock()); + // Ignore default value (4320) + return value != 4320 ? value : DEFAULT_ESTIMATED_BTC_FEES; + } + + private Set getProofOfBurnTxs(int chainHeight, int fromBlock) { + return daoStateService.getProofOfBurnTxs().stream() + .filter(tx -> tx.getBlockHeight() <= chainHeight) + .filter(tx -> tx.getBlockHeight() >= fromBlock) + .collect(Collectors.toSet()); + } + + + private long getBurnedAmountFromLegacyBurningManDPT(Set proofOfBurnTxs) { + // Burningman + // Legacy burningman use those opReturn data to mark their burn transactions from delayed payout transaction cases. + // opReturn data from delayed payout txs when BM traded with the refund agent: 1701e47e5d8030f444c182b5e243871ebbaeadb5e82f + // opReturn data from delayed payout txs when BM traded with traders who got reimbursed by the DAO: 1701293c488822f98e70e047012f46f5f1647f37deb7 + return proofOfBurnTxs.stream() + .filter(e -> { + String hash = Hex.encode(e.getLastTxOutput().getOpReturnData()); + return "1701e47e5d8030f444c182b5e243871ebbaeadb5e82f".equals(hash) || + "1701293c488822f98e70e047012f46f5f1647f37deb7".equals(hash); + }) + .mapToLong(Tx::getBurntBsq) + .sum(); + } + + private long getBurnedAmountFromLegacyBurningMansBtcFees(Set proofOfBurnTxs) { + // Burningman + // Legacy burningman use those opReturn data to mark their burn transactions from delayed payout transaction cases. + // opReturn data from delayed payout txs when BM traded with the refund agent: 1701e47e5d8030f444c182b5e243871ebbaeadb5e82f + // opReturn data from delayed payout txs when BM traded with traders who got reimbursed by the DAO: 1701293c488822f98e70e047012f46f5f1647f37deb7 + return proofOfBurnTxs.stream() + .filter(e -> "1701721206fe6b40777763de1c741f4fd2706d94775d".equals(Hex.encode(e.getLastTxOutput().getOpReturnData()))) + .mapToLong(Tx::getBurntBsq) + .sum(); + } + + private long getBurnedAmountFromBurningMen(Collection burningManCandidates, int fromBlock) { + return burningManCandidates.stream() + .map(burningManCandidate -> burningManCandidate.getBurnOutputModels().stream() + .filter(burnOutputModel -> burnOutputModel.getHeight() >= fromBlock) + .mapToLong(BurnOutputModel::getAmount) + .sum()) + .mapToLong(e -> e) + .sum(); + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java b/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java index cda8c29101..0cd854266e 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java @@ -26,23 +26,26 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.extern.slf4j.Slf4j; +/** + * Contains all relevant data for a burningman candidate (any contributor who has made a compensation request or was + * a receiver of a genesis output). + */ @Slf4j @Getter @EqualsAndHashCode public final class BurningManCandidate { + private final List compensationModels = new ArrayList<>(); private long accumulatedCompensationAmount; private long accumulatedDecayedCompensationAmount; + private double compensationShare; // Share of accumulated decayed compensation amounts in relation to total issued amounts + private double boostedCompensationShare; + private Optional mostRecentAddress = Optional.empty(); + + private final List burnOutputModels = new ArrayList<>(); private long accumulatedBurnAmount; private long accumulatedDecayedBurnAmount; - private long allowedBurnAmount; - private long expectedRevenue; - private double issuanceShare; // share of accumulated decayed issuance amounts in relation to total issued amounts - private double boostedIssuanceShare; - private double burnOutputShare; // share of accumulated decayed burn amounts in relation to total burned amounts - private double effectiveBurnOutputShare; // limited to boostedIssuanceShare - private final List compensationModels = new ArrayList<>(); - private final List burnOutputModels = new ArrayList<>(); - private Optional mostRecentAddress = Optional.empty(); + private double burnAmountShare; // Share of accumulated decayed burn amounts in relation to total burned amounts + private double cappedBurnAmountShare; // Capped burnAmountShare. Cannot be larger than boostedCompensationShare BurningManCandidate() { } @@ -77,47 +80,28 @@ public final class BurningManCandidate { .map(CompensationModel::getAddress); } - public void calculateIssuanceShare(double totalIssuanceWeight) { - issuanceShare = totalIssuanceWeight > 0 ? accumulatedDecayedCompensationAmount / totalIssuanceWeight : 0; - boostedIssuanceShare = issuanceShare * BurningManService.ISSUANCE_BOOST_FACTOR; - } + public void calculateShares(double totalDecayedCompensationAmounts, double totalDecayedBurnAmounts) { + compensationShare = totalDecayedCompensationAmounts > 0 ? accumulatedDecayedCompensationAmount / totalDecayedCompensationAmounts : 0; + boostedCompensationShare = compensationShare * BurningManService.ISSUANCE_BOOST_FACTOR; - public void calculateBurnOutputShare(double totalBurnOutputWeight) { - burnOutputShare = totalBurnOutputWeight > 0 ? accumulatedDecayedBurnAmount / totalBurnOutputWeight : 0; - effectiveBurnOutputShare = Math.min(boostedIssuanceShare, burnOutputShare); - } - - public void calculateExpectedRevenue(long averageDistributionPerCycle) { - expectedRevenue = Math.round(effectiveBurnOutputShare * averageDistributionPerCycle); - } - - public void calculateAllowedBurnAmount(long burnTarget) { - double maxBurnAmount = burnTarget + BurningManService.BURN_TARGET_BOOST_AMOUNT; - if (issuanceShare > 0 && maxBurnAmount > 0 && effectiveBurnOutputShare < boostedIssuanceShare) { - // We reduce it with what he had already burned - long value = Math.round(boostedIssuanceShare * maxBurnAmount) - accumulatedDecayedBurnAmount; - // If below dust we set value to 0 - allowedBurnAmount = value < 546 ? 0 : value; - } else { - allowedBurnAmount = 0; - } + burnAmountShare = totalDecayedBurnAmounts > 0 ? accumulatedDecayedBurnAmount / totalDecayedBurnAmounts : 0; + cappedBurnAmountShare = Math.min(boostedCompensationShare, burnAmountShare); } @Override public String toString() { return "BurningManCandidate{" + - "\r\n accumulatedCompensationAmount=" + accumulatedCompensationAmount + + "\r\n compensationModels=" + compensationModels + + ",\r\n accumulatedCompensationAmount=" + accumulatedCompensationAmount + ",\r\n accumulatedDecayedCompensationAmount=" + accumulatedDecayedCompensationAmount + + ",\r\n compensationShare=" + compensationShare + + ",\r\n boostedCompensationShare=" + boostedCompensationShare + + ",\r\n mostRecentAddress=" + mostRecentAddress + + ",\r\n burnOutputModels=" + burnOutputModels + ",\r\n accumulatedBurnAmount=" + accumulatedBurnAmount + ",\r\n accumulatedDecayedBurnAmount=" + accumulatedDecayedBurnAmount + - ",\r\n allowedBurnAmount=" + allowedBurnAmount + - ",\r\n expectedRevenue=" + expectedRevenue + - ",\r\n issuanceShare=" + issuanceShare + - ",\r\n boostedIssuanceShare=" + boostedIssuanceShare + - ",\r\n burnOutputShare=" + burnOutputShare + - ",\r\n effectiveBurnOutputShare=" + effectiveBurnOutputShare + - ",\r\n compensationModels=" + compensationModels + - ",\r\n burnOutputModels=" + burnOutputModels + + ",\r\n burnAmountShare=" + burnAmountShare + + ",\r\n cappedBurnAmountShare=" + cappedBurnAmountShare + "\r\n}"; } } diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManInfoService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java similarity index 71% rename from core/src/main/java/bisq/core/dao/burningman/BurningManInfoService.java rename to core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java index 92e45dd303..0b5e079230 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManInfoService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java @@ -36,11 +36,16 @@ import java.util.Set; import java.util.stream.Collectors; @Singleton -public class BurningManInfoService implements DaoStateListener { +public class BurningManPresentationService implements DaoStateListener { + // Burn target gets increased by that amount to give more flexibility. + // Burn target is calculated from reimbursements + estimated BTC fees - burned amounts. + static final long BURN_TARGET_BOOST_AMOUNT = 10000000; + private final DaoStateService daoStateService; private final MyProposalListService myProposalListService; private final BsqWalletService bsqWalletService; private final BurningManService burningManService; + private final BurnTargetService burnTargetService; private int currentChainHeight; private Optional burnTarget; @@ -51,14 +56,16 @@ public class BurningManInfoService implements DaoStateListener { private Optional> myGenesisOutputNames; @Inject - public BurningManInfoService(DaoStateService daoStateService, - MyProposalListService myProposalListService, - BsqWalletService bsqWalletService, - BurningManService burningManService) { + public BurningManPresentationService(DaoStateService daoStateService, + MyProposalListService myProposalListService, + BsqWalletService bsqWalletService, + BurningManService burningManService, + BurnTargetService burnTargetService) { this.daoStateService = daoStateService; this.myProposalListService = myProposalListService; this.bsqWalletService = bsqWalletService; this.burningManService = burningManService; + this.burnTargetService = burnTargetService; daoStateService.addDaoStateListener(this); } @@ -75,6 +82,9 @@ public class BurningManInfoService implements DaoStateListener { burnTarget = Optional.empty(); myCompensationRequestNames = null; averageDistributionPerCycle = Optional.empty(); + + // averageDistributionPerCycle = getAverageDistributionPerCycle(currentChainHeight); + // burnTarget = getBurnTarget(currentChainHeight, burningManCandidatesByName.values()); } @@ -87,7 +97,7 @@ public class BurningManInfoService implements DaoStateListener { return burnTarget.get(); } - burnTarget = Optional.of(burningManService.getBurnTarget(currentChainHeight, getBurningManCandidatesByName().values())); + burnTarget = Optional.of(burnTargetService.getBurnTarget(currentChainHeight, getBurningManCandidatesByName().values())); return burnTarget.get(); } @@ -96,16 +106,36 @@ public class BurningManInfoService implements DaoStateListener { return averageDistributionPerCycle.get(); } - averageDistributionPerCycle = Optional.of(burningManService.getAverageDistributionPerCycle(currentChainHeight)); + averageDistributionPerCycle = Optional.of(burnTargetService.getAverageDistributionPerCycle(currentChainHeight)); return averageDistributionPerCycle.get(); } + public long getExpectedRevenue(BurningManCandidate burningManCandidate) { + return Math.round(burningManCandidate.getCappedBurnAmountShare() * getAverageDistributionPerCycle()); + } + + public long getAllowedBurnAmount(BurningManCandidate burningManCandidate) { + double maxBurnAmount = getBurnTarget() + BURN_TARGET_BOOST_AMOUNT; + double issuanceShare = burningManCandidate.getCompensationShare(); + double boostedIssuanceShare = burningManCandidate.getBoostedCompensationShare(); + long accumulatedDecayedBurnAmount = burningManCandidate.getAccumulatedDecayedBurnAmount(); + double effectiveBurnOutputShare = burningManCandidate.getCappedBurnAmountShare(); + if (issuanceShare > 0 && maxBurnAmount > 0 && effectiveBurnOutputShare < boostedIssuanceShare) { + // We reduce it with what he had already burned + long value = Math.round(boostedIssuanceShare * maxBurnAmount) - accumulatedDecayedBurnAmount; + // If below dust we set value to 0 + return value < 546 ? 0 : value; + } else { + return 0; + } + } + public Set getReimbursements() { if (!reimbursements.isEmpty()) { return reimbursements; } - reimbursements.addAll(burningManService.getReimbursements(currentChainHeight)); + reimbursements.addAll(burnTargetService.getReimbursements(currentChainHeight)); return reimbursements; } diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index 3841976980..0fff764146 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -27,15 +27,11 @@ import bisq.core.dao.state.model.blockchain.BaseTx; import bisq.core.dao.state.model.blockchain.Tx; import bisq.core.dao.state.model.blockchain.TxOutput; import bisq.core.dao.state.model.governance.CompensationProposal; -import bisq.core.dao.state.model.governance.Cycle; import bisq.core.dao.state.model.governance.Issuance; import bisq.core.dao.state.model.governance.IssuanceType; -import bisq.core.dao.state.model.governance.ReimbursementProposal; import bisq.network.p2p.storage.P2PDataStorage; -import bisq.common.util.Hex; - import javax.inject.Inject; import javax.inject.Singleton; @@ -49,11 +45,16 @@ import java.util.HashSet; import java.util.Map; import java.util.Optional; import java.util.Set; -import java.util.stream.Collectors; import java.util.stream.Stream; import lombok.extern.slf4j.Slf4j; +/** + * Methods are used by the DelayedPayoutTxReceiverService, which is used in the trade protocol for creating and + * verifying the delayed payout transaction. As verification is done by trade peer it requires data to be deterministic. + * Parameters listed here must not be changed as they could break verification of the peers + * delayed payout transaction in case not both traders are using the same version. + */ @Slf4j @Singleton class BurningManService { @@ -77,14 +78,6 @@ class BurningManService { // The max. age in blocks for the decay function used for burned amounts. private static final int MAX_BURN_AMOUNT_AGE = YEAR_AS_BLOCKS; - // Number of cycles for accumulating reimbursement amounts. Used for the burn target. - private static final int NUM_REIMBURSEMENT_CYCLES = 12; - - // Default value for the estimated BTC trade fees per month as BSQ sat value (100 sat = 1 BSQ). - // Default is roughly average of last 12 months at Nov 2022. - // Can be changed with DAO parameter voting. - private static final long DEFAULT_ESTIMATED_BTC_FEES = 6200000; - // Factor for boosting the issuance share (issuance is compensation requests + genesis output). // This will be used for increasing the allowed burn amount. The factor gives more flexibility // and compensates for those who do not burn. The burn share is capped by that factor as well. @@ -92,9 +85,6 @@ class BurningManService { // even if they would have burned more and had a higher burn share than 20%. static final double ISSUANCE_BOOST_FACTOR = 2; - // Burn target gets increased by that amount to give more flexibility. - // Burn target is calculated from reimbursements + estimated BTC fees - burned amounts. - static final long BURN_TARGET_BOOST_AMOUNT = 10000000; private final DaoStateService daoStateService; private final CycleService cycleService; @@ -122,19 +112,19 @@ class BurningManService { daoStateService.getIssuanceSetForType(IssuanceType.COMPENSATION).stream() .filter(issuance -> issuance.getChainHeight() <= chainHeight) .forEach(issuance -> { - getCompensationProposalsForIssuance(issuance).forEach(compensationProposal -> { - String name = compensationProposal.getName(); - burningManCandidatesByName.putIfAbsent(name, new BurningManCandidate()); - BurningManCandidate candidate = burningManCandidatesByName.get(name); + getCompensationProposalsForIssuance(issuance).forEach(compensationProposal -> { + String name = compensationProposal.getName(); + burningManCandidatesByName.putIfAbsent(name, new BurningManCandidate()); + BurningManCandidate candidate = burningManCandidatesByName.get(name); - // Issuance - compensationProposal.getBurningManReceiverAddress() - .or(() -> daoStateService.getTx(compensationProposal.getTxId()) - .map(this::getAddressFromCompensationRequest)) - .ifPresent(address -> { - int issuanceHeight = issuance.getChainHeight(); - long issuanceAmount = getIssuanceAmountForCompensationRequest(issuance); - int cycleIndex = getCycleIndex(issuanceHeight); + // Issuance + compensationProposal.getBurningManReceiverAddress() + .or(() -> daoStateService.getTx(compensationProposal.getTxId()) + .map(this::getAddressFromCompensationRequest)) + .ifPresent(address -> { + int issuanceHeight = issuance.getChainHeight(); + long issuanceAmount = getIssuanceAmountForCompensationRequest(issuance); + int cycleIndex = getCycleIndex(issuanceHeight); if (isValidReimbursement(name, cycleIndex, issuanceAmount)) { long decayedIssuanceAmount = getDecayedCompensationAmount(issuanceAmount, issuanceHeight, chainHeight); long issuanceDate = daoStateService.getBlockTime(issuanceHeight); @@ -171,8 +161,7 @@ class BurningManService { issuanceHeight, txOutput.getTxId(), txOutput.getIndex(), - issuanceDate, - 0)); + issuanceDate)); addBurnOutputModel(chainHeight, proofOfBurnOpReturnTxOutputByHash, name, candidate); })); @@ -183,66 +172,10 @@ class BurningManService { double totalDecayedBurnAmounts = burningManCandidates.stream() .mapToDouble(BurningManCandidate::getAccumulatedDecayedBurnAmount) .sum(); - long averageDistributionPerCycle = getAverageDistributionPerCycle(chainHeight); - long burnTarget = getBurnTarget(chainHeight, burningManCandidates); - - burningManCandidates.forEach(candidate -> { - candidate.calculateIssuanceShare(totalDecayedCompensationAmounts); - candidate.calculateBurnOutputShare(totalDecayedBurnAmounts); - candidate.calculateExpectedRevenue(averageDistributionPerCycle); - candidate.calculateAllowedBurnAmount(burnTarget); - } - ); - + burningManCandidates.forEach(candidate -> candidate.calculateShares(totalDecayedCompensationAmounts, totalDecayedBurnAmounts)); return burningManCandidatesByName; } - Set getReimbursements(int chainHeight) { - Set reimbursements = new HashSet<>(); - daoStateService.getIssuanceSetForType(IssuanceType.REIMBURSEMENT).stream() - .filter(issuance -> issuance.getChainHeight() <= chainHeight) - .forEach(issuance -> getReimbursementProposalsForIssuance(issuance) - .forEach(reimbursementProposal -> { - int issuanceHeight = issuance.getChainHeight(); - long issuanceAmount = issuance.getAmount(); - long issuanceDate = daoStateService.getBlockTime(issuanceHeight); - int cycleIndex = getCycleIndex(issuanceHeight); - reimbursements.add(new ReimbursementModel( - issuanceAmount, - issuanceHeight, - issuanceDate, - cycleIndex)); - })); - return reimbursements; - } - - long getBurnTarget(int chainHeight, Collection burningManCandidates) { - int fromBlock = getFirstBlockOfPastCycle(chainHeight, NUM_REIMBURSEMENT_CYCLES); - long accumulatedReimbursements = getAccumulatedReimbursements(chainHeight, fromBlock); - long accumulatedEstimatedBtcTradeFees = getAccumulatedEstimatedBtcTradeFees(chainHeight, NUM_REIMBURSEMENT_CYCLES); - - // Legacy BurningMan - Set proofOfBurnTxs = getProofOfBurnTxs(chainHeight, fromBlock); - long burnedAmountFromLegacyBurningManDPT = getBurnedAmountFromLegacyBurningManDPT(proofOfBurnTxs); - long burnedAmountFromLegacyBurningMansBtcFees = getBurnedAmountFromLegacyBurningMansBtcFees(proofOfBurnTxs); - - // Distributed BurningMen - // burningManCandidates are already filtered with chainHeight - long burnedAmountFromBurningMen = getBurnedAmountFromBurningMen(burningManCandidates, fromBlock); - - return accumulatedReimbursements - + accumulatedEstimatedBtcTradeFees - - burnedAmountFromLegacyBurningManDPT - - burnedAmountFromLegacyBurningMansBtcFees - - burnedAmountFromBurningMen; - } - - long getAverageDistributionPerCycle(int chainHeight) { - int fromBlock = getFirstBlockOfPastCycle(chainHeight, 3); - long reimbursements = getAccumulatedReimbursements(chainHeight, fromBlock); - long btcTradeFees = getAccumulatedEstimatedBtcTradeFees(chainHeight, 3); - return Math.round((reimbursements + btcTradeFees) / 3d); - } String getLegacyBurningManAddress(int chainHeight) { return daoStateService.getParamValue(Param.RECIPIENT_BTC_ADDRESS, chainHeight); @@ -253,11 +186,6 @@ class BurningManService { // Private /////////////////////////////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////////////////////////////// - // BurningManCandidatesByName - /////////////////////////////////////////////////////////////////////////////////////////// - private Map> getProofOfBurnOpReturnTxOutputByHash(int chainHeight) { Map> map = new HashMap<>(); daoStateService.getProofOfBurnOpReturnTxOutputs().stream() @@ -386,113 +314,4 @@ class BurningManService { private long getDecayedGenesisOutputAmount(long amount) { return Math.round(amount * GENESIS_OUTPUT_AMOUNT_FACTOR); } - - - /////////////////////////////////////////////////////////////////////////////////////////// - // Reimbursements - /////////////////////////////////////////////////////////////////////////////////////////// - - private Stream getReimbursementProposalsForIssuance(Issuance issuance) { - return proposalService.getProposalPayloads().stream() - .map(ProposalPayload::getProposal) - .filter(proposal -> issuance.getTxId().equals(proposal.getTxId())) - .filter(proposal -> proposal instanceof ReimbursementProposal) - .map(proposal -> (ReimbursementProposal) proposal); - } - - - /////////////////////////////////////////////////////////////////////////////////////////// - // Burn target - /////////////////////////////////////////////////////////////////////////////////////////// - - private int getFirstBlockOfPastCycle(int chainHeight, int numPastCycles) { - Optional optionalCycle = daoStateService.getCycle(chainHeight); - if (optionalCycle.isEmpty()) { - return 0; - } - - Cycle currentCycle = optionalCycle.get(); - return daoStateService.getPastCycle(currentCycle, numPastCycles) - .map(Cycle::getHeightOfFirstBlock) - .orElse(daoStateService.getGenesisBlockHeight()); - } - - private long getAccumulatedReimbursements(int chainHeight, int fromBlock) { - return getReimbursements(chainHeight).stream() - .filter(reimbursementModel -> reimbursementModel.getHeight() >= fromBlock) - .mapToLong(ReimbursementModel::getAmount) - .sum(); - } - - private long getAccumulatedEstimatedBtcTradeFees(int chainHeight, int numCycles) { - Optional optionalCycle = daoStateService.getCycle(chainHeight); - if (optionalCycle.isEmpty()) { - return 0; - } - long accumulatedEstimatedBtcTradeFees = 0; - Cycle candidateCycle = optionalCycle.get(); - for (int i = 0; i < numCycles; i++) { - // LOCK_TIME_TRADE_PAYOUT was never used. We re-purpose it as value for BTC fee revenue per cycle. This can be added as oracle data by DAO voting. - // We cannot change the ParamType to BSQ as that would break consensus - long estimatedBtcTradeFeesPerCycle = getBtcTradeFeeFromParam(candidateCycle); - accumulatedEstimatedBtcTradeFees += estimatedBtcTradeFeesPerCycle; - Optional previousCycle = daoStateService.getPreviousCycle(candidateCycle); - if (previousCycle.isPresent()) { - candidateCycle = previousCycle.get(); - } else { - break; - } - } - return accumulatedEstimatedBtcTradeFees; - } - - private long getBtcTradeFeeFromParam(Cycle cycle) { - int value = daoStateService.getParamValueAsBlock(Param.LOCK_TIME_TRADE_PAYOUT, cycle.getHeightOfFirstBlock()); - // Ignore default value (4320) - return value != 4320 ? value : DEFAULT_ESTIMATED_BTC_FEES; - } - - private Set getProofOfBurnTxs(int chainHeight, int fromBlock) { - return daoStateService.getProofOfBurnTxs().stream() - .filter(tx -> tx.getBlockHeight() <= chainHeight) - .filter(tx -> tx.getBlockHeight() >= fromBlock) - .collect(Collectors.toSet()); - } - - - private long getBurnedAmountFromLegacyBurningManDPT(Set proofOfBurnTxs) { - // Burningman - // Legacy burningman use those opReturn data to mark their burn transactions from delayed payout transaction cases. - // opReturn data from delayed payout txs when BM traded with the refund agent: 1701e47e5d8030f444c182b5e243871ebbaeadb5e82f - // opReturn data from delayed payout txs when BM traded with traders who got reimbursed by the DAO: 1701293c488822f98e70e047012f46f5f1647f37deb7 - return proofOfBurnTxs.stream() - .filter(e -> { - String hash = Hex.encode(e.getLastTxOutput().getOpReturnData()); - return "1701e47e5d8030f444c182b5e243871ebbaeadb5e82f".equals(hash) || - "1701293c488822f98e70e047012f46f5f1647f37deb7".equals(hash); - }) - .mapToLong(Tx::getBurntBsq) - .sum(); - } - - private long getBurnedAmountFromLegacyBurningMansBtcFees(Set proofOfBurnTxs) { - // Burningman - // Legacy burningman use those opReturn data to mark their burn transactions from delayed payout transaction cases. - // opReturn data from delayed payout txs when BM traded with the refund agent: 1701e47e5d8030f444c182b5e243871ebbaeadb5e82f - // opReturn data from delayed payout txs when BM traded with traders who got reimbursed by the DAO: 1701293c488822f98e70e047012f46f5f1647f37deb7 - return proofOfBurnTxs.stream() - .filter(e -> "1701721206fe6b40777763de1c741f4fd2706d94775d".equals(Hex.encode(e.getLastTxOutput().getOpReturnData()))) - .mapToLong(Tx::getBurntBsq) - .sum(); - } - - private long getBurnedAmountFromBurningMen(Collection burningManCandidates, int fromBlock) { - return burningManCandidates.stream() - .map(burningManCandidate -> burningManCandidate.getBurnOutputModels().stream() - .filter(burnOutputModel -> burnOutputModel.getHeight() >= fromBlock) - .mapToLong(BurnOutputModel::getAmount) - .sum()) - .mapToLong(e -> e) - .sum(); - } } diff --git a/core/src/main/java/bisq/core/dao/burningman/CompensationModel.java b/core/src/main/java/bisq/core/dao/burningman/CompensationModel.java index 37b609bf06..bd9a4354c1 100644 --- a/core/src/main/java/bisq/core/dao/burningman/CompensationModel.java +++ b/core/src/main/java/bisq/core/dao/burningman/CompensationModel.java @@ -49,8 +49,7 @@ public final class CompensationModel { int height, String txId, int outputIndex, - long date, - int cycleIndex) { + long date) { return new CompensationModel(address, amount, decayedAmount, @@ -58,7 +57,7 @@ public final class CompensationModel { txId, Optional.of(outputIndex), date, - cycleIndex); + 0); } diff --git a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java index df489d8066..3deb3986db 100644 --- a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java +++ b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java @@ -39,7 +39,7 @@ import java.util.stream.Collectors; /** * Used in the trade protocol for creating and verifying the delayed payout transaction. * Requires to be deterministic. - * Changes in the parameters related to the delayedPayoutTxReceivers list could break verification of the peers + * Changes in the parameters related to the receivers list could break verification of the peers * delayed payout transaction in case not both are using the same version. */ @Singleton @@ -134,8 +134,8 @@ public class DelayedPayoutTxReceiverService implements DaoStateListener { List> receivers = burningManCandidates.stream() .filter(candidate -> candidate.getMostRecentAddress().isPresent()) - .map(candidates -> new Tuple2<>(Math.round(candidates.getEffectiveBurnOutputShare() * spendableAmount), - candidates.getMostRecentAddress().get())) + .map(candidate -> new Tuple2<>(Math.round(candidate.getCappedBurnAmountShare() * spendableAmount), + candidate.getMostRecentAddress().get())) .filter(tuple -> tuple.first >= minOutputAmount) .sorted(Comparator., Long>comparing(tuple -> tuple.first) .thenComparing(tuple -> tuple.second)) diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java index 04377bc2b6..7573a25f20 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java @@ -37,7 +37,8 @@ class BurnOutputListItem { BurnOutputListItem(BurnOutputModel model, BsqFormatter bsqFormatter) { height = model.getHeight(); - cycleIndex = model.getCycleIndex(); + // We show first cycle with index 0 as 1 + cycleIndex = model.getCycleIndex() + 1; date = model.getDate(); dateAsString = DisplayUtils.formatDateTime(new Date(date)); amount = model.getAmount(); diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java index f78d1a7a62..d789a7cbe1 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java @@ -18,6 +18,7 @@ package bisq.desktop.main.dao.burnbsq.burningmen; import bisq.core.dao.burningman.BurningManCandidate; +import bisq.core.dao.burningman.BurningManPresentationService; import bisq.core.locale.Res; import bisq.core.util.FormattingUtils; import bisq.core.util.coin.BsqFormatter; @@ -29,30 +30,33 @@ import lombok.Getter; @EqualsAndHashCode class BurningmenListItem { private final BurningManCandidate burningManCandidate; - private final String name, address, effectiveBurnOutputShareAsString, issuanceShareAsString, + private final String name, address, cappedBurnOutputShareAsString, compensationShareAsString, accumulatedDecayedBurnAmountAsBsq, allowedBurnAmountAsBsq, accumulatedBurnAmountAsBsq, accumulatedDecayedCompensationAmountAsBsq, accumulatedCompensationAmountAsBsq, expectedRevenueAsBsq; private final long allowedBurnAmount, accumulatedDecayedBurnAmount, accumulatedBurnAmount, accumulatedDecayedCompensationAmount, accumulatedCompensationAmount, expectedRevenue; private final int numBurnOutputs, numIssuances; - private final double effectiveBurnOutputShare, issuanceShare; + private final double cappedBurnOutputShare, compensationShare; - BurningmenListItem(String name, BurningManCandidate burningManCandidate, BsqFormatter bsqFormatter) { + BurningmenListItem(BurningManPresentationService burningManPresentationService, + String name, + BurningManCandidate burningManCandidate, + BsqFormatter bsqFormatter) { this.burningManCandidate = burningManCandidate; this.name = name; address = burningManCandidate.getMostRecentAddress().orElse(Res.get("shared.na")); // Burn - allowedBurnAmount = burningManCandidate.getAllowedBurnAmount(); + allowedBurnAmount = burningManPresentationService.getAllowedBurnAmount(burningManCandidate); allowedBurnAmountAsBsq = bsqFormatter.formatCoinWithCode(allowedBurnAmount); accumulatedBurnAmount = burningManCandidate.getAccumulatedBurnAmount(); accumulatedBurnAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedBurnAmount); accumulatedDecayedBurnAmount = burningManCandidate.getAccumulatedDecayedBurnAmount(); accumulatedDecayedBurnAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedDecayedBurnAmount); - effectiveBurnOutputShare = burningManCandidate.getEffectiveBurnOutputShare(); - effectiveBurnOutputShareAsString = FormattingUtils.formatToPercentWithSymbol(effectiveBurnOutputShare); - expectedRevenue = burningManCandidate.getExpectedRevenue(); + cappedBurnOutputShare = burningManCandidate.getCappedBurnAmountShare(); + cappedBurnOutputShareAsString = FormattingUtils.formatToPercentWithSymbol(cappedBurnOutputShare); + expectedRevenue = burningManPresentationService.getExpectedRevenue(burningManCandidate); expectedRevenueAsBsq = bsqFormatter.formatCoinWithCode(expectedRevenue); numBurnOutputs = burningManCandidate.getBurnOutputModels().size(); @@ -61,8 +65,8 @@ class BurningmenListItem { accumulatedCompensationAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedCompensationAmount); accumulatedDecayedCompensationAmount = burningManCandidate.getAccumulatedDecayedCompensationAmount(); accumulatedDecayedCompensationAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedDecayedCompensationAmount); - issuanceShare = burningManCandidate.getIssuanceShare(); - issuanceShareAsString = FormattingUtils.formatToPercentWithSymbol(issuanceShare); + compensationShare = burningManCandidate.getCompensationShare(); + compensationShareAsString = FormattingUtils.formatToPercentWithSymbol(compensationShare); numIssuances = burningManCandidate.getCompensationModels().size(); } } diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java index 1c2598b5ee..dd23eb3f90 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java @@ -30,7 +30,7 @@ import bisq.desktop.util.Layout; import bisq.desktop.util.validation.BsqValidator; import bisq.core.dao.DaoFacade; -import bisq.core.dao.burningman.BurningManInfoService; +import bisq.core.dao.burningman.BurningManPresentationService; import bisq.core.dao.governance.proofofburn.ProofOfBurnService; import bisq.core.dao.governance.proposal.TxException; import bisq.core.dao.state.DaoStateListener; @@ -89,7 +89,7 @@ import static bisq.desktop.util.FormBuilder.*; @FxmlView public class BurningmenView extends ActivatableView implements DaoStateListener { private final DaoFacade daoFacade; - private final BurningManInfoService burningManInfoService; + private final BurningManPresentationService burningManPresentationService; private final ProofOfBurnService proofOfBurnService; private final BsqFormatter bsqFormatter; private final CoinFormatter btcFormatter; @@ -132,13 +132,13 @@ public class BurningmenView extends ActivatableView implements @Inject private BurningmenView(DaoFacade daoFacade, - BurningManInfoService burningManInfoService, + BurningManPresentationService burningManPresentationService, ProofOfBurnService proofOfBurnService, BsqFormatter bsqFormatter, @Named(FormattingUtils.BTC_FORMATTER_KEY) CoinFormatter btcFormatter, BsqValidator bsqValidator) { this.daoFacade = daoFacade; - this.burningManInfoService = burningManInfoService; + this.burningManPresentationService = burningManPresentationService; this.proofOfBurnService = proofOfBurnService; this.bsqFormatter = bsqFormatter; this.btcFormatter = btcFormatter; @@ -410,19 +410,19 @@ public class BurningmenView extends ActivatableView implements /////////////////////////////////////////////////////////////////////////////////////////// private void updateData() { - burningmenObservableList.setAll(burningManInfoService.getBurningManCandidatesByName().entrySet().stream() - .map(entry -> new BurningmenListItem(entry.getKey(), entry.getValue(), bsqFormatter)) + burningmenObservableList.setAll(burningManPresentationService.getBurningManCandidatesByName().entrySet().stream() + .map(entry -> new BurningmenListItem(burningManPresentationService, entry.getKey(), entry.getValue(), bsqFormatter)) .collect(Collectors.toList())); - reimbursementObservableList.setAll(burningManInfoService.getReimbursements().stream() + reimbursementObservableList.setAll(burningManPresentationService.getReimbursements().stream() .map(reimbursementModel -> new ReimbursementListItem(reimbursementModel, bsqFormatter)) .collect(Collectors.toList())); - expectedRevenueField.setText(bsqFormatter.formatCoinWithCode(burningManInfoService.getAverageDistributionPerCycle())); - burnTargetField.setText(bsqFormatter.formatCoinWithCode(burningManInfoService.getBurnTarget())); + expectedRevenueField.setText(bsqFormatter.formatCoinWithCode(burningManPresentationService.getAverageDistributionPerCycle())); + burnTargetField.setText(bsqFormatter.formatCoinWithCode(burningManPresentationService.getBurnTarget())); if (daoFacade.isParseBlockChainComplete()) { - Set myContributorNames = burningManInfoService.getMyCompensationRequestNames(); - burningManInfoService.findMyGenesisOutputNames().ifPresent(myContributorNames::addAll); + Set myContributorNames = burningManPresentationService.getMyCompensationRequestNames(); + burningManPresentationService.findMyGenesisOutputNames().ifPresent(myContributorNames::addAll); Map burningmenListItemByName = burningmenObservableList.stream() .collect(Collectors.toMap(BurningmenListItem::getName, e -> e)); @@ -439,7 +439,7 @@ public class BurningmenView extends ActivatableView implements burningmenFilteredList.setPredicate(burningmenListItem -> { boolean showOnlyActiveBurningmen = showOnlyActiveBurningmenToggle.isSelected(); String filterText = burningmenFilterField.getText(); - boolean activeBurnerOrShowAll = !showOnlyActiveBurningmen || burningmenListItem.getEffectiveBurnOutputShare() > 0; + boolean activeBurnerOrShowAll = !showOnlyActiveBurningmen || burningmenListItem.getCappedBurnOutputShare() > 0; if (filterText == null || filterText.trim().isEmpty()) { return activeBurnerOrShowAll; } else { @@ -578,7 +578,7 @@ public class BurningmenView extends ActivatableView implements public void updateItem(final BurningmenListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { - setText(item.getEffectiveBurnOutputShareAsString()); + setText(item.getCappedBurnOutputShareAsString()); } else setText(""); } @@ -587,7 +587,7 @@ public class BurningmenView extends ActivatableView implements }); burningmenTableView.getColumns().add(column); column.setSortType(TableColumn.SortType.DESCENDING); - column.setComparator(Comparator.comparing(BurningmenListItem::getEffectiveBurnOutputShare)); + column.setComparator(Comparator.comparing(BurningmenListItem::getCappedBurnOutputShare)); burningmenTableView.getSortOrder().add(column); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.decayedBurnAmount")); @@ -676,7 +676,7 @@ public class BurningmenView extends ActivatableView implements public void updateItem(final BurningmenListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { - setText(item.getIssuanceShareAsString()); + setText(item.getCompensationShareAsString()); } else setText(""); } @@ -684,7 +684,7 @@ public class BurningmenView extends ActivatableView implements } }); burningmenTableView.getColumns().add(column); - column.setComparator(Comparator.comparing(BurningmenListItem::getIssuanceShare)); + column.setComparator(Comparator.comparing(BurningmenListItem::getCompensationShare)); column.setSortType(TableColumn.SortType.DESCENDING); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.decayedIssuanceAmount")); diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java index 895205fba8..db8c3bb701 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java @@ -37,7 +37,8 @@ class CompensationListItem { CompensationListItem(CompensationModel model, BsqFormatter bsqFormatter) { height = model.getHeight(); - cycleIndex = model.getCycleIndex(); + // We show first cycle with index 0 as 1 + cycleIndex = model.getCycleIndex() + 1; date = model.getDate(); dateAsString = DisplayUtils.formatDateTime(new Date(date)); amount = model.getAmount(); diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java index 5116f28ef2..a6b10128d4 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java @@ -36,7 +36,8 @@ class ReimbursementListItem { ReimbursementListItem(ReimbursementModel model, BsqFormatter bsqFormatter) { height = model.getHeight(); - cycleIndex = model.getCycleIndex(); + // We show first cycle with index 0 as 1 + cycleIndex = model.getCycleIndex() + 1; date = model.getDate(); dateAsString = DisplayUtils.formatDateTime(new Date(date)); amount = model.getAmount(); From 9fa9fbf57bf0262b0a7b17855b22e30493b8389e Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 7 Nov 2022 10:26:24 -0500 Subject: [PATCH 30/86] Fix incorrect cycle index Signed-off-by: HenrikJannsen --- .../main/dao/burnbsq/burningmen/BurnOutputListItem.java | 3 +-- .../main/dao/burnbsq/burningmen/CompensationListItem.java | 3 +-- .../main/dao/burnbsq/burningmen/ReimbursementListItem.java | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java index 7573a25f20..04377bc2b6 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java @@ -37,8 +37,7 @@ class BurnOutputListItem { BurnOutputListItem(BurnOutputModel model, BsqFormatter bsqFormatter) { height = model.getHeight(); - // We show first cycle with index 0 as 1 - cycleIndex = model.getCycleIndex() + 1; + cycleIndex = model.getCycleIndex(); date = model.getDate(); dateAsString = DisplayUtils.formatDateTime(new Date(date)); amount = model.getAmount(); diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java index db8c3bb701..895205fba8 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java @@ -37,8 +37,7 @@ class CompensationListItem { CompensationListItem(CompensationModel model, BsqFormatter bsqFormatter) { height = model.getHeight(); - // We show first cycle with index 0 as 1 - cycleIndex = model.getCycleIndex() + 1; + cycleIndex = model.getCycleIndex(); date = model.getDate(); dateAsString = DisplayUtils.formatDateTime(new Date(date)); amount = model.getAmount(); diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java index a6b10128d4..5116f28ef2 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java @@ -36,8 +36,7 @@ class ReimbursementListItem { ReimbursementListItem(ReimbursementModel model, BsqFormatter bsqFormatter) { height = model.getHeight(); - // We show first cycle with index 0 as 1 - cycleIndex = model.getCycleIndex() + 1; + cycleIndex = model.getCycleIndex(); date = model.getDate(); dateAsString = DisplayUtils.formatDateTime(new Date(date)); amount = model.getAmount(); From fb51861c4b272cab29b19fc0b674cf61f6639a53 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 7 Nov 2022 10:28:15 -0500 Subject: [PATCH 31/86] Use months and not cycles for burn target and average. Add checks for chainHeight to make code more generic (in the current usage its always last block anyway) Signed-off-by: HenrikJannsen --- .../dao/burningman/BurnTargetService.java | 97 +++++++++---------- 1 file changed, 46 insertions(+), 51 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java index 3fd967c565..4cde6c3c6e 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java @@ -35,7 +35,6 @@ import javax.inject.Singleton; import java.util.Collection; import java.util.HashSet; -import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -50,7 +49,8 @@ import lombok.extern.slf4j.Slf4j; @Singleton class BurnTargetService { // Number of cycles for accumulating reimbursement amounts. Used for the burn target. - private static final int NUM_REIMBURSEMENT_CYCLES = 12; + private static final int NUM_MONTHS_BURN_TARGET = 12; + private static final int NUM_MONTHS_AVERAGE_DISTRIBUTION = 3; // Default value for the estimated BTC trade fees per month as BSQ sat value (100 sat = 1 BSQ). // Default is roughly average of last 12 months at Nov 2022. @@ -94,31 +94,45 @@ class BurnTargetService { } long getBurnTarget(int chainHeight, Collection burningManCandidates) { - int fromBlock = getFirstBlockOfPastCycle(chainHeight, NUM_REIMBURSEMENT_CYCLES); + int fromBlock = chainHeight - NUM_MONTHS_BURN_TARGET * BurningManService.MONTH_AS_BLOCKS; long accumulatedReimbursements = getAccumulatedReimbursements(chainHeight, fromBlock); - long accumulatedEstimatedBtcTradeFees = getAccumulatedEstimatedBtcTradeFees(chainHeight, NUM_REIMBURSEMENT_CYCLES); + long accumulatedEstimatedBtcTradeFees = getAccumulatedEstimatedBtcTradeFees(chainHeight, fromBlock); // Legacy BurningMan Set proofOfBurnTxs = getProofOfBurnTxs(chainHeight, fromBlock); - long burnedAmountFromLegacyBurningManDPT = getBurnedAmountFromLegacyBurningManDPT(proofOfBurnTxs); - long burnedAmountFromLegacyBurningMansBtcFees = getBurnedAmountFromLegacyBurningMansBtcFees(proofOfBurnTxs); + long burnedAmountFromLegacyBurningManDPT = getBurnedAmountFromLegacyBurningManDPT(proofOfBurnTxs, chainHeight, fromBlock); + long burnedAmountFromLegacyBurningMansBtcFees = getBurnedAmountFromLegacyBurningMansBtcFees(proofOfBurnTxs, chainHeight, fromBlock); // Distributed BurningMen - // burningManCandidates are already filtered with chainHeight - long burnedAmountFromBurningMen = getBurnedAmountFromBurningMen(burningManCandidates, fromBlock); + long burnedAmountFromBurningMen = getBurnedAmountFromBurningMen(burningManCandidates, chainHeight, fromBlock); - return accumulatedReimbursements + + long burnTarget = accumulatedReimbursements + accumulatedEstimatedBtcTradeFees - burnedAmountFromLegacyBurningManDPT - burnedAmountFromLegacyBurningMansBtcFees - burnedAmountFromBurningMen; + + log.debug("accumulatedReimbursements: {}\n" + + "+ accumulatedEstimatedBtcTradeFees: {}\n" + + "- burnedAmountFromLegacyBurningManDPT: {}\n" + + "- burnedAmountFromLegacyBurningMansBtcFees: {}\n" + + "- burnedAmountFromBurningMen: {}\n" + + "= burnTarget: {}\n", + accumulatedReimbursements, + accumulatedEstimatedBtcTradeFees, + burnedAmountFromLegacyBurningManDPT, + burnedAmountFromLegacyBurningMansBtcFees, + burnedAmountFromBurningMen, + burnTarget); + return burnTarget; } long getAverageDistributionPerCycle(int chainHeight) { - int fromBlock = getFirstBlockOfPastCycle(chainHeight, 3); + int fromBlock = chainHeight - NUM_MONTHS_AVERAGE_DISTRIBUTION * BurningManService.MONTH_AS_BLOCKS; long reimbursements = getAccumulatedReimbursements(chainHeight, fromBlock); - long btcTradeFees = getAccumulatedEstimatedBtcTradeFees(chainHeight, 3); - return Math.round((reimbursements + btcTradeFees) / 3d); + long btcTradeFees = getAccumulatedEstimatedBtcTradeFees(chainHeight, fromBlock); + return Math.round((reimbursements + btcTradeFees) / (double) NUM_MONTHS_AVERAGE_DISTRIBUTION); } @@ -138,18 +152,6 @@ class BurnTargetService { return daoStateService.getCycle(height).map(cycleService::getCycleIndex).orElse(0); } - private int getFirstBlockOfPastCycle(int chainHeight, int numPastCycles) { - Optional optionalCycle = daoStateService.getCycle(chainHeight); - if (optionalCycle.isEmpty()) { - return 0; - } - - Cycle currentCycle = optionalCycle.get(); - return daoStateService.getPastCycle(currentCycle, numPastCycles) - .map(Cycle::getHeightOfFirstBlock) - .orElse(daoStateService.getGenesisBlockHeight()); - } - private long getAccumulatedReimbursements(int chainHeight, int fromBlock) { return getReimbursements(chainHeight).stream() .filter(reimbursementModel -> reimbursementModel.getHeight() >= fromBlock) @@ -157,26 +159,12 @@ class BurnTargetService { .sum(); } - private long getAccumulatedEstimatedBtcTradeFees(int chainHeight, int numCycles) { - Optional optionalCycle = daoStateService.getCycle(chainHeight); - if (optionalCycle.isEmpty()) { - return 0; - } - long accumulatedEstimatedBtcTradeFees = 0; - Cycle candidateCycle = optionalCycle.get(); - for (int i = 0; i < numCycles; i++) { - // LOCK_TIME_TRADE_PAYOUT was never used. We re-purpose it as value for BTC fee revenue per cycle. This can be added as oracle data by DAO voting. - // We cannot change the ParamType to BSQ as that would break consensus - long estimatedBtcTradeFeesPerCycle = getBtcTradeFeeFromParam(candidateCycle); - accumulatedEstimatedBtcTradeFees += estimatedBtcTradeFeesPerCycle; - Optional previousCycle = daoStateService.getPreviousCycle(candidateCycle); - if (previousCycle.isPresent()) { - candidateCycle = previousCycle.get(); - } else { - break; - } - } - return accumulatedEstimatedBtcTradeFees; + private long getAccumulatedEstimatedBtcTradeFees(int chainHeight, int fromBlock) { + return daoStateService.getCycles().stream() + .filter(cycle -> cycle.getHeightOfFirstBlock() >= fromBlock) + .filter(cycle -> cycle.getHeightOfFirstBlock() <= chainHeight) + .mapToLong(this::getBtcTradeFeeFromParam) + .sum(); } private long getBtcTradeFeeFromParam(Cycle cycle) { @@ -187,20 +175,22 @@ class BurnTargetService { private Set getProofOfBurnTxs(int chainHeight, int fromBlock) { return daoStateService.getProofOfBurnTxs().stream() - .filter(tx -> tx.getBlockHeight() <= chainHeight) .filter(tx -> tx.getBlockHeight() >= fromBlock) + .filter(tx -> tx.getBlockHeight() <= chainHeight) .collect(Collectors.toSet()); } - private long getBurnedAmountFromLegacyBurningManDPT(Set proofOfBurnTxs) { + private long getBurnedAmountFromLegacyBurningManDPT(Set proofOfBurnTxs, int chainHeight, int fromBlock) { // Burningman // Legacy burningman use those opReturn data to mark their burn transactions from delayed payout transaction cases. // opReturn data from delayed payout txs when BM traded with the refund agent: 1701e47e5d8030f444c182b5e243871ebbaeadb5e82f // opReturn data from delayed payout txs when BM traded with traders who got reimbursed by the DAO: 1701293c488822f98e70e047012f46f5f1647f37deb7 return proofOfBurnTxs.stream() - .filter(e -> { - String hash = Hex.encode(e.getLastTxOutput().getOpReturnData()); + .filter(tx -> tx.getBlockHeight() >= fromBlock) + .filter(tx -> tx.getBlockHeight() <= chainHeight) + .filter(tx -> { + String hash = Hex.encode(tx.getLastTxOutput().getOpReturnData()); return "1701e47e5d8030f444c182b5e243871ebbaeadb5e82f".equals(hash) || "1701293c488822f98e70e047012f46f5f1647f37deb7".equals(hash); }) @@ -208,21 +198,26 @@ class BurnTargetService { .sum(); } - private long getBurnedAmountFromLegacyBurningMansBtcFees(Set proofOfBurnTxs) { + private long getBurnedAmountFromLegacyBurningMansBtcFees(Set proofOfBurnTxs, int chainHeight, int fromBlock) { // Burningman // Legacy burningman use those opReturn data to mark their burn transactions from delayed payout transaction cases. // opReturn data from delayed payout txs when BM traded with the refund agent: 1701e47e5d8030f444c182b5e243871ebbaeadb5e82f // opReturn data from delayed payout txs when BM traded with traders who got reimbursed by the DAO: 1701293c488822f98e70e047012f46f5f1647f37deb7 return proofOfBurnTxs.stream() - .filter(e -> "1701721206fe6b40777763de1c741f4fd2706d94775d".equals(Hex.encode(e.getLastTxOutput().getOpReturnData()))) + .filter(tx -> tx.getBlockHeight() >= fromBlock) + .filter(tx -> tx.getBlockHeight() <= chainHeight) + .filter(tx -> "1701721206fe6b40777763de1c741f4fd2706d94775d".equals(Hex.encode(tx.getLastTxOutput().getOpReturnData()))) .mapToLong(Tx::getBurntBsq) .sum(); } - private long getBurnedAmountFromBurningMen(Collection burningManCandidates, int fromBlock) { + private long getBurnedAmountFromBurningMen(Collection burningManCandidates, + int chainHeight, + int fromBlock) { return burningManCandidates.stream() .map(burningManCandidate -> burningManCandidate.getBurnOutputModels().stream() .filter(burnOutputModel -> burnOutputModel.getHeight() >= fromBlock) + .filter(burnOutputModel -> burnOutputModel.getHeight() <= chainHeight) .mapToLong(BurnOutputModel::getAmount) .sum()) .mapToLong(e -> e) From 88cf28c526cdc978e22186dbb1ec4346861468dc Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 7 Nov 2022 10:29:53 -0500 Subject: [PATCH 32/86] Add applyBlock method and call at constructor (some classes get not initiated at app startup but created by UI activity). Remove accumulatedDecayedBurnAmount at getAllowedBurnAmount. Was incorrect. Signed-off-by: HenrikJannsen --- .../dao/burningman/BtcFeeReceiverService.java | 5 +++++ .../BurningManPresentationService.java | 18 +++++++++++------- .../core/dao/burningman/BurningManService.java | 4 ++-- .../DelayedPayoutTxReceiverService.java | 5 +++++ .../dao/burnbsq/burningmen/BurningmenView.java | 2 +- 5 files changed, 24 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java index 6b176cd4c7..29fed0dd68 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java @@ -43,6 +43,7 @@ public class BtcFeeReceiverService implements DaoStateListener { this.burningManService = burningManService; daoStateService.addDaoStateListener(this); + daoStateService.getLastBlock().ifPresent(this::applyBlock); } @@ -52,6 +53,10 @@ public class BtcFeeReceiverService implements DaoStateListener { @Override public void onParseBlockCompleteAfterBatchProcessing(Block block) { + applyBlock(block); + } + + private void applyBlock(Block block) { currentChainHeight = block.getHeight(); } diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java index 0b5e079230..ba4032db4c 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java @@ -35,6 +35,9 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; + +@Slf4j @Singleton public class BurningManPresentationService implements DaoStateListener { // Burn target gets increased by that amount to give more flexibility. @@ -48,12 +51,12 @@ public class BurningManPresentationService implements DaoStateListener { private final BurnTargetService burnTargetService; private int currentChainHeight; - private Optional burnTarget; + private Optional burnTarget = Optional.empty(); private final Map burningManCandidatesByName = new HashMap<>(); private final Set reimbursements = new HashSet<>(); private Optional averageDistributionPerCycle = Optional.empty(); private Set myCompensationRequestNames; - private Optional> myGenesisOutputNames; + private Optional> myGenesisOutputNames = Optional.empty(); @Inject public BurningManPresentationService(DaoStateService daoStateService, @@ -68,6 +71,7 @@ public class BurningManPresentationService implements DaoStateListener { this.burnTargetService = burnTargetService; daoStateService.addDaoStateListener(this); + daoStateService.getLastBlock().ifPresent(this::applyBlock); } /////////////////////////////////////////////////////////////////////////////////////////// @@ -76,15 +80,16 @@ public class BurningManPresentationService implements DaoStateListener { @Override public void onParseBlockCompleteAfterBatchProcessing(Block block) { + applyBlock(block); + } + + private void applyBlock(Block block) { currentChainHeight = block.getHeight(); burningManCandidatesByName.clear(); reimbursements.clear(); burnTarget = Optional.empty(); myCompensationRequestNames = null; averageDistributionPerCycle = Optional.empty(); - - // averageDistributionPerCycle = getAverageDistributionPerCycle(currentChainHeight); - // burnTarget = getBurnTarget(currentChainHeight, burningManCandidatesByName.values()); } @@ -118,11 +123,10 @@ public class BurningManPresentationService implements DaoStateListener { double maxBurnAmount = getBurnTarget() + BURN_TARGET_BOOST_AMOUNT; double issuanceShare = burningManCandidate.getCompensationShare(); double boostedIssuanceShare = burningManCandidate.getBoostedCompensationShare(); - long accumulatedDecayedBurnAmount = burningManCandidate.getAccumulatedDecayedBurnAmount(); double effectiveBurnOutputShare = burningManCandidate.getCappedBurnAmountShare(); if (issuanceShare > 0 && maxBurnAmount > 0 && effectiveBurnOutputShare < boostedIssuanceShare) { // We reduce it with what he had already burned - long value = Math.round(boostedIssuanceShare * maxBurnAmount) - accumulatedDecayedBurnAmount; + long value = Math.round(boostedIssuanceShare * maxBurnAmount); // If below dust we set value to 0 return value < 546 ? 0 : value; } else { diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index 0fff764146..068ecc6489 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -59,8 +59,8 @@ import lombok.extern.slf4j.Slf4j; @Singleton class BurningManService { private static final int DAY_AS_BLOCKS = 144; - private static final int MONTH_AS_BLOCKS = 30 * DAY_AS_BLOCKS; // Ignore 31 days months, as the block time is anyway not exact. - private static final int YEAR_AS_BLOCKS = 12 * MONTH_AS_BLOCKS; + static final int MONTH_AS_BLOCKS = 30 * DAY_AS_BLOCKS; // Ignore 31 days months, as the block time is anyway not exact. + static final int YEAR_AS_BLOCKS = 12 * MONTH_AS_BLOCKS; // Parameters // Cannot be changed after release as it would break trade protocol verification of DPT receivers. diff --git a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java index 3deb3986db..3bba830757 100644 --- a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java +++ b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java @@ -80,6 +80,7 @@ public class DelayedPayoutTxReceiverService implements DaoStateListener { this.burningManService = burningManService; daoStateService.addDaoStateListener(this); + daoStateService.getLastBlock().ifPresent(this::applyBlock); } @@ -89,6 +90,10 @@ public class DelayedPayoutTxReceiverService implements DaoStateListener { @Override public void onParseBlockCompleteAfterBatchProcessing(Block block) { + applyBlock(block); + } + + private void applyBlock(Block block) { currentChainHeight = block.getHeight(); } diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java index dd23eb3f90..a75c5228cb 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java @@ -320,7 +320,7 @@ public class BurningmenView extends ActivatableView implements @Override protected void activate() { - GUIUtil.setFitToRowsForTableView(burningmenTableView, 36, 28, 15, 30); + GUIUtil.setFitToRowsForTableView(burningmenTableView, 36, 28, 10, 15); GUIUtil.setFitToRowsForTableView(reimbursementsTableView, 36, 28, 3, 6); daoFacade.addBsqStateListener(this); From 5799fb27ebc82932fce3099a1ab0569db0ba1e30 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 7 Nov 2022 11:16:30 -0500 Subject: [PATCH 33/86] Add balance listener for burn bsq input Signed-off-by: HenrikJannsen --- .../burnbsq/burningmen/BurningmenView.java | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java index a75c5228cb..d1e5e4f37f 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java @@ -29,6 +29,8 @@ import bisq.desktop.util.GUIUtil; import bisq.desktop.util.Layout; import bisq.desktop.util.validation.BsqValidator; +import bisq.core.btc.listeners.BsqBalanceListener; +import bisq.core.btc.wallet.BsqWalletService; import bisq.core.dao.DaoFacade; import bisq.core.dao.burningman.BurningManPresentationService; import bisq.core.dao.governance.proofofburn.ProofOfBurnService; @@ -87,10 +89,11 @@ import java.util.stream.Collectors; import static bisq.desktop.util.FormBuilder.*; @FxmlView -public class BurningmenView extends ActivatableView implements DaoStateListener { +public class BurningmenView extends ActivatableView implements DaoStateListener, BsqBalanceListener { private final DaoFacade daoFacade; private final BurningManPresentationService burningManPresentationService; private final ProofOfBurnService proofOfBurnService; + private final BsqWalletService bsqWalletService; private final BsqFormatter bsqFormatter; private final CoinFormatter btcFormatter; private final BsqValidator burnAmountValidator; @@ -134,12 +137,14 @@ public class BurningmenView extends ActivatableView implements private BurningmenView(DaoFacade daoFacade, BurningManPresentationService burningManPresentationService, ProofOfBurnService proofOfBurnService, + BsqWalletService bsqWalletService, BsqFormatter bsqFormatter, @Named(FormattingUtils.BTC_FORMATTER_KEY) CoinFormatter btcFormatter, BsqValidator bsqValidator) { this.daoFacade = daoFacade; this.burningManPresentationService = burningManPresentationService; this.proofOfBurnService = proofOfBurnService; + this.bsqWalletService = bsqWalletService; this.bsqFormatter = bsqFormatter; this.btcFormatter = btcFormatter; this.burnAmountValidator = bsqValidator; @@ -324,6 +329,7 @@ public class BurningmenView extends ActivatableView implements GUIUtil.setFitToRowsForTableView(reimbursementsTableView, 36, 28, 3, 6); daoFacade.addBsqStateListener(this); + bsqWalletService.addBsqBalanceListener(this); amountInputTextField.textProperty().addListener(amountInputTextFieldListener); amountInputTextField.focusedProperty().addListener(amountFocusOutListener); @@ -369,6 +375,8 @@ public class BurningmenView extends ActivatableView implements updateData(); } + onUpdateAvailableBalance(bsqWalletService.getAvailableBalance()); + updateButtonState(); updateBurningmenPredicate(); } @@ -376,6 +384,7 @@ public class BurningmenView extends ActivatableView implements @Override protected void deactivate() { daoFacade.removeBsqStateListener(this); + bsqWalletService.removeBsqBalanceListener(this); amountInputTextField.textProperty().removeListener(amountInputTextFieldListener); amountInputTextField.focusedProperty().removeListener(amountFocusOutListener); @@ -405,6 +414,27 @@ public class BurningmenView extends ActivatableView implements } + /////////////////////////////////////////////////////////////////////////////////////////// + // BsqBalanceListener + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public void onUpdateBalances(Coin availableBalance, + Coin availableNonBsqBalance, + Coin unverifiedBalance, + Coin unconfirmedChangeBalance, + Coin lockedForVotingBalance, + Coin lockupBondsBalance, + Coin unlockingBondsBalance) { + onUpdateAvailableBalance(availableBalance); + } + + private void onUpdateAvailableBalance(Coin availableBalance) { + burnAmountValidator.setAvailableBalance(availableBalance); + updateButtonState(); + } + + /////////////////////////////////////////////////////////////////////////////////////////// // Private /////////////////////////////////////////////////////////////////////////////////////////// From 78d3fd8d4470e3b2f56ebfe26407acf7d1cce64f Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 7 Nov 2022 12:08:44 -0500 Subject: [PATCH 34/86] Fix wrong initial value. For myGenesisOutputNames we check for null not Optional.empty as empty is a valid case and we do not want to wrap the optional field into another Optional. Also myCompensationRequestNames is using a null check and gets reset to null instead of an empty set as the empty set is a valid case as well. Signed-off-by: HenrikJannsen --- .../core/dao/burningman/BurningManPresentationService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java index ba4032db4c..58e3968a1e 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java @@ -55,8 +55,8 @@ public class BurningManPresentationService implements DaoStateListener { private final Map burningManCandidatesByName = new HashMap<>(); private final Set reimbursements = new HashSet<>(); private Optional averageDistributionPerCycle = Optional.empty(); - private Set myCompensationRequestNames; - private Optional> myGenesisOutputNames = Optional.empty(); + private Set myCompensationRequestNames = null; + private Optional> myGenesisOutputNames = null; @Inject public BurningManPresentationService(DaoStateService daoStateService, From 402c4075d0a12775b2f74c2b1845c5030792d103 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 7 Nov 2022 14:47:09 -0500 Subject: [PATCH 35/86] Add option to add opReturn data at BSQ wallet send screen for non-BSQ balance. This can be used for providing proof of ownership of a genesis output when attaching a custom BM receiver address. See: https://github.com/bisq-network/proposals/issues/390#issuecomment-1306075295 Signed-off-by: HenrikJannsen --- .../core/btc/wallet/BsqWalletService.java | 2 +- .../resources/i18n/displayStrings.properties | 4 + .../main/dao/wallet/send/BsqSendView.java | 84 +++++++++++++++++-- 3 files changed, 83 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/bisq/core/btc/wallet/BsqWalletService.java b/core/src/main/java/bisq/core/btc/wallet/BsqWalletService.java index 273def00b0..f07ea8cf97 100644 --- a/core/src/main/java/bisq/core/btc/wallet/BsqWalletService.java +++ b/core/src/main/java/bisq/core/btc/wallet/BsqWalletService.java @@ -591,7 +591,7 @@ public class BsqWalletService extends WalletService implements DaoStateListener coinSelector.setUtxoCandidates(null); // We reuse the selectors. Reset the transactionOutputCandidates field return tx; } catch (InsufficientMoneyException e) { - log.error("getPreparedSendTx: tx={}", tx.toString()); + log.error("getPreparedSendTx: tx={}", tx); log.error(e.toString()); throw new InsufficientBsqException(e.missing); } diff --git a/core/src/main/resources/i18n/displayStrings.properties b/core/src/main/resources/i18n/displayStrings.properties index 18e94cff5b..c7bac13b8a 100644 --- a/core/src/main/resources/i18n/displayStrings.properties +++ b/core/src/main/resources/i18n/displayStrings.properties @@ -2494,6 +2494,10 @@ dao.wallet.send.receiverBtcAddress=Receiver's BTC address dao.wallet.send.setDestinationAddress=Fill in your destination address dao.wallet.send.send=Send BSQ funds dao.wallet.send.inputControl=Select inputs +dao.wallet.send.addOpReturn=Add data +dao.wallet.send.preImage=Pre-image +dao.wallet.send.opReturnAsHex=Op-Return data Hex encoded +dao.wallet.send.opReturnAsHash=Hash of Op-Return data dao.wallet.send.sendBtc=Send BTC funds dao.wallet.send.sendFunds.headline=Confirm withdrawal request dao.wallet.send.sendFunds.details=Sending: {0}\nTo receiving address: {1}.\nRequired mining fee is: {2} ({3} satoshis/vbyte)\nTransaction vsize: {4} vKb\n\nThe recipient will receive: {5}\n\nAre you sure you want to withdraw that amount? diff --git a/desktop/src/main/java/bisq/desktop/main/dao/wallet/send/BsqSendView.java b/desktop/src/main/java/bisq/desktop/main/dao/wallet/send/BsqSendView.java index 010b58ea96..c9caa5e0be 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/wallet/send/BsqSendView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/wallet/send/BsqSendView.java @@ -61,8 +61,11 @@ import bisq.core.util.validation.BtcAddressValidator; import bisq.network.p2p.P2PService; import bisq.common.UserThread; +import bisq.common.crypto.Hash; import bisq.common.handlers.ResultHandler; +import bisq.common.util.Hex; import bisq.common.util.Tuple2; +import bisq.common.util.Tuple3; import org.bitcoinj.core.Coin; import org.bitcoinj.core.InsufficientMoneyException; @@ -72,8 +75,13 @@ import org.bitcoinj.core.TransactionOutput; import javax.inject.Inject; import javax.inject.Named; +import com.google.common.base.Charsets; + import javafx.scene.control.Button; +import javafx.scene.control.Label; +import javafx.scene.control.TextField; import javafx.scene.layout.GridPane; +import javafx.scene.layout.VBox; import javafx.beans.value.ChangeListener; @@ -87,6 +95,7 @@ import javax.annotation.Nullable; import static bisq.desktop.util.FormBuilder.addInputTextField; import static bisq.desktop.util.FormBuilder.addTitledGroupBg; +import static bisq.desktop.util.FormBuilder.addTopLabelTextField; @FxmlView public class BsqSendView extends ActivatableView implements BsqBalanceListener { @@ -106,12 +115,15 @@ public class BsqSendView extends ActivatableView implements BsqB private final WalletPasswordWindow walletPasswordWindow; private int gridRow = 0; - private InputTextField amountInputTextField, btcAmountInputTextField; - private Button sendBsqButton, sendBtcButton, bsqInputControlButton, btcInputControlButton; + private InputTextField amountInputTextField, btcAmountInputTextField, preImageTextField; + private TextField opReturnDataAsHexTextField; + private VBox opReturnDataAsHexBox; + private Label opReturnDataAsHexLabel; + private Button sendBsqButton, sendBtcButton, bsqInputControlButton, btcInputControlButton, btcOpReturnButton; private InputTextField receiversAddressInputTextField, receiversBtcAddressInputTextField; private ChangeListener focusOutListener; private TitledGroupBg btcTitledGroupBg; - private ChangeListener inputTextFieldListener; + private ChangeListener inputTextFieldListener, preImageInputTextFieldListener; @Nullable private Set bsqUtxoCandidates; @Nullable @@ -166,6 +178,8 @@ public class BsqSendView extends ActivatableView implements BsqB }; inputTextFieldListener = (observable, oldValue, newValue) -> onUpdateBalances(); + preImageInputTextFieldListener = (observable, oldValue, newValue) -> opReturnDataAsHexTextField.setText(getOpReturnDataAsHexFromPreImage(newValue)); + setSendBtcGroupVisibleState(false); } @@ -183,6 +197,7 @@ public class BsqSendView extends ActivatableView implements BsqB bsqInputControlButton.setOnAction((event) -> onBsqInputControl()); sendBtcButton.setOnAction((event) -> onSendBtc()); btcInputControlButton.setOnAction((event) -> onBtcInputControl()); + btcOpReturnButton.setOnAction((event) -> onShowPreImageField()); receiversAddressInputTextField.focusedProperty().addListener(focusOutListener); amountInputTextField.focusedProperty().addListener(focusOutListener); @@ -193,6 +208,7 @@ public class BsqSendView extends ActivatableView implements BsqB amountInputTextField.textProperty().addListener(inputTextFieldListener); receiversBtcAddressInputTextField.textProperty().addListener(inputTextFieldListener); btcAmountInputTextField.textProperty().addListener(inputTextFieldListener); + preImageTextField.textProperty().addListener(preImageInputTextFieldListener); bsqWalletService.addBsqBalanceListener(this); @@ -228,11 +244,13 @@ public class BsqSendView extends ActivatableView implements BsqB amountInputTextField.textProperty().removeListener(inputTextFieldListener); receiversBtcAddressInputTextField.textProperty().removeListener(inputTextFieldListener); btcAmountInputTextField.textProperty().removeListener(inputTextFieldListener); + preImageTextField.textProperty().removeListener(preImageInputTextFieldListener); bsqWalletService.removeBsqBalanceListener(this); sendBsqButton.setOnAction(null); btcInputControlButton.setOnAction(null); + btcOpReturnButton.setOnAction(null); sendBtcButton.setOnAction(null); bsqInputControlButton.setOnAction(null); } @@ -367,12 +385,14 @@ public class BsqSendView extends ActivatableView implements BsqB btcAmountInputTextField.setVisible(visible); sendBtcButton.setVisible(visible); btcInputControlButton.setVisible(visible); + btcOpReturnButton.setVisible(visible); btcTitledGroupBg.setManaged(visible); receiversBtcAddressInputTextField.setManaged(visible); btcAmountInputTextField.setManaged(visible); sendBtcButton.setManaged(visible); btcInputControlButton.setManaged(visible); + btcOpReturnButton.setManaged(visible); } private void addSendBtcGroup() { @@ -387,10 +407,24 @@ public class BsqSendView extends ActivatableView implements BsqB btcAmountInputTextField.setValidator(btcValidator); GridPane.setColumnSpan(btcAmountInputTextField, 3); - Tuple2 tuple = FormBuilder.add2ButtonsAfterGroup(root, ++gridRow, - Res.get("dao.wallet.send.sendBtc"), Res.get("dao.wallet.send.inputControl")); + preImageTextField = addInputTextField(root, ++gridRow, Res.get("dao.wallet.send.preImage")); + GridPane.setColumnSpan(preImageTextField, 3); + preImageTextField.setVisible(false); + preImageTextField.setManaged(false); + + Tuple3 opReturnDataAsHexTuple = addTopLabelTextField(root, ++gridRow, Res.get("dao.wallet.send.opReturnAsHex"), -10); + opReturnDataAsHexLabel = opReturnDataAsHexTuple.first; + opReturnDataAsHexTextField = opReturnDataAsHexTuple.second; + opReturnDataAsHexBox = opReturnDataAsHexTuple.third; + GridPane.setColumnSpan(opReturnDataAsHexBox, 3); + opReturnDataAsHexBox.setVisible(false); + opReturnDataAsHexBox.setManaged(false); + + Tuple3 tuple = FormBuilder.add3ButtonsAfterGroup(root, ++gridRow, + Res.get("dao.wallet.send.sendBtc"), Res.get("dao.wallet.send.inputControl"), Res.get("dao.wallet.send.addOpReturn")); sendBtcButton = tuple.first; btcInputControlButton = tuple.second; + btcOpReturnButton = tuple.third; } private void onBtcInputControl() { @@ -410,6 +444,15 @@ public class BsqSendView extends ActivatableView implements BsqB show(); } + private void onShowPreImageField() { + btcOpReturnButton.setDisable(true); + preImageTextField.setManaged(true); + preImageTextField.setVisible(true); + opReturnDataAsHexBox.setManaged(true); + opReturnDataAsHexBox.setVisible(true); + GridPane.setRowSpan(btcTitledGroupBg, 4); + } + private void setBtcUtxoCandidates(Set candidates) { this.btcUtxoCandidates = candidates; updateBtcValidator(getSpendableBtcBalance()); @@ -430,8 +473,12 @@ public class BsqSendView extends ActivatableView implements BsqB String receiversAddressString = receiversBtcAddressInputTextField.getText(); Coin receiverAmount = bsqFormatter.parseToBTC(btcAmountInputTextField.getText()); try { + byte[] opReturnData = null; + if (preImageTextField.isVisible() && !preImageTextField.getText().trim().isEmpty()) { + opReturnData = getOpReturnData(preImageTextField.getText()); + } Transaction preparedSendTx = bsqWalletService.getPreparedSendBtcTx(receiversAddressString, receiverAmount, btcUtxoCandidates); - Transaction txWithBtcFee = btcWalletService.completePreparedSendBsqTx(preparedSendTx); + Transaction txWithBtcFee = btcWalletService.completePreparedBsqTx(preparedSendTx, opReturnData); Transaction signedTx = bsqWalletService.signTxAndVerifyNoDustOutputs(txWithBtcFee); Coin miningFee = signedTx.getFee(); @@ -449,6 +496,7 @@ public class BsqSendView extends ActivatableView implements BsqB () -> { receiversBtcAddressInputTextField.setText(""); btcAmountInputTextField.setText(""); + preImageTextField.clear(); receiversBtcAddressInputTextField.resetValidation(); btcAmountInputTextField.resetValidation(); @@ -463,6 +511,30 @@ public class BsqSendView extends ActivatableView implements BsqB } } + private byte[] getOpReturnData(String preImageAsString) { + byte[] opReturnData; + try { + // If preImage is hex encoded we use it directly + opReturnData = Hex.decode(preImageAsString); + } catch (Throwable ignore) { + opReturnData = preImageAsString.getBytes(Charsets.UTF_8); + } + + // If too long for OpReturn we hash it + if (opReturnData.length > 80) { + opReturnData = Hash.getSha256Ripemd160hash(opReturnData); + opReturnDataAsHexLabel.setText(Res.get("dao.wallet.send.opReturnAsHash")); + } else { + opReturnDataAsHexLabel.setText(Res.get("dao.wallet.send.opReturnAsHex")); + } + + return opReturnData; + } + + private String getOpReturnDataAsHexFromPreImage(String preImage) { + return Hex.encode(getOpReturnData(preImage)); + } + private void handleError(Throwable t) { if (t instanceof InsufficientMoneyException) { final Coin missingCoin = ((InsufficientMoneyException) t).missing; From 4e25d2f253dc49bc2e401cf2f92ba623873ce693 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 7 Nov 2022 17:18:20 -0500 Subject: [PATCH 36/86] Add isDevMode check to set dev params Signed-off-by: HenrikJannsen --- .../java/bisq/core/dao/burningman/BurnTargetService.java | 5 +++-- .../java/bisq/core/dao/burningman/BurningManService.java | 4 +++- .../dao/burningman/DelayedPayoutTxReceiverService.java | 7 +++---- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java index 4cde6c3c6e..bc1b4aad4d 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java @@ -28,6 +28,7 @@ import bisq.core.dao.state.model.governance.Issuance; import bisq.core.dao.state.model.governance.IssuanceType; import bisq.core.dao.state.model.governance.ReimbursementProposal; +import bisq.common.app.DevEnv; import bisq.common.util.Hex; import javax.inject.Inject; @@ -55,7 +56,7 @@ class BurnTargetService { // Default value for the estimated BTC trade fees per month as BSQ sat value (100 sat = 1 BSQ). // Default is roughly average of last 12 months at Nov 2022. // Can be changed with DAO parameter voting. - private static final long DEFAULT_ESTIMATED_BTC_FEES = 6200000; + private static final long DEFAULT_ESTIMATED_BTC_FEES = DevEnv.isDevMode() ? 100000 : 6200000; private final DaoStateService daoStateService; private final CycleService cycleService; @@ -113,7 +114,7 @@ class BurnTargetService { - burnedAmountFromLegacyBurningMansBtcFees - burnedAmountFromBurningMen; - log.debug("accumulatedReimbursements: {}\n" + + log.info("accumulatedReimbursements: {}\n" + "+ accumulatedEstimatedBtcTradeFees: {}\n" + "- burnedAmountFromLegacyBurningManDPT: {}\n" + "- burnedAmountFromLegacyBurningMansBtcFees: {}\n" + diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index 068ecc6489..303be1cfc2 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -32,6 +32,8 @@ import bisq.core.dao.state.model.governance.IssuanceType; import bisq.network.p2p.storage.P2PDataStorage; +import bisq.common.app.DevEnv; + import javax.inject.Inject; import javax.inject.Singleton; @@ -59,7 +61,7 @@ import lombok.extern.slf4j.Slf4j; @Singleton class BurningManService { private static final int DAY_AS_BLOCKS = 144; - static final int MONTH_AS_BLOCKS = 30 * DAY_AS_BLOCKS; // Ignore 31 days months, as the block time is anyway not exact. + static final int MONTH_AS_BLOCKS = DevEnv.isDevMode() ? 13 : 30 * DAY_AS_BLOCKS; // Ignore 31 days months, as the block time is anyway not exact. static final int YEAR_AS_BLOCKS = 12 * MONTH_AS_BLOCKS; // Parameters diff --git a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java index 3bba830757..c8f80216c7 100644 --- a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java +++ b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java @@ -21,6 +21,7 @@ import bisq.core.dao.state.DaoStateListener; import bisq.core.dao.state.DaoStateService; import bisq.core.dao.state.model.blockchain.Block; +import bisq.common.app.DevEnv; import bisq.common.util.Tuple2; import bisq.common.util.Utilities; @@ -44,9 +45,7 @@ import java.util.stream.Collectors; */ @Singleton public class DelayedPayoutTxReceiverService implements DaoStateListener { - // TODO - // public static final Date ACTIVATION_DATE = Utilities.getUTCDate(2022, GregorianCalendar.OCTOBER, 25); - public static final Date ACTIVATION_DATE = Utilities.getUTCDate(2023, GregorianCalendar.JANUARY, 1); + private static final Date ACTIVATION_DATE = Utilities.getUTCDate(2023, GregorianCalendar.JANUARY, 1); // One part of the limit for the min. amount to be included in the DPT outputs. // The miner fee rate multiplied by 2 times the output size is the other factor. @@ -66,7 +65,7 @@ public class DelayedPayoutTxReceiverService implements DaoStateListener { private static final long DPT_MIN_TX_FEE_RATE = 10; public static boolean isActivated() { - return new Date().after(ACTIVATION_DATE); + return DevEnv.isDevMode() || new Date().after(ACTIVATION_DATE); } From a6a018883dfc6d0c28912899382cd2a233ee493e Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 7 Nov 2022 17:27:06 -0500 Subject: [PATCH 37/86] Add isDevTesting method for adjusting behaviour for dev testing purposes Signed-off-by: HenrikJannsen --- common/src/main/java/bisq/common/app/DevEnv.java | 4 ++++ .../java/bisq/core/dao/burningman/BurnTargetService.java | 2 +- .../java/bisq/core/dao/burningman/BurningManService.java | 2 +- .../dao/burningman/DelayedPayoutTxReceiverService.java | 2 +- core/src/main/java/bisq/core/trade/TradeManager.java | 7 +++++++ desktop/src/main/java/bisq/desktop/main/MainViewModel.java | 2 +- 6 files changed, 15 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/bisq/common/app/DevEnv.java b/common/src/main/java/bisq/common/app/DevEnv.java index c0065ea3e2..ee0495c902 100644 --- a/common/src/main/java/bisq/common/app/DevEnv.java +++ b/common/src/main/java/bisq/common/app/DevEnv.java @@ -44,6 +44,10 @@ public class DevEnv { return devMode; } + public static boolean isDevTesting() { + return false; + } + public static void setDevMode(boolean devMode) { DevEnv.devMode = devMode; } diff --git a/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java index bc1b4aad4d..3f21e781b5 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java @@ -56,7 +56,7 @@ class BurnTargetService { // Default value for the estimated BTC trade fees per month as BSQ sat value (100 sat = 1 BSQ). // Default is roughly average of last 12 months at Nov 2022. // Can be changed with DAO parameter voting. - private static final long DEFAULT_ESTIMATED_BTC_FEES = DevEnv.isDevMode() ? 100000 : 6200000; + private static final long DEFAULT_ESTIMATED_BTC_FEES = DevEnv.isDevTesting() ? 100000 : 6200000; private final DaoStateService daoStateService; private final CycleService cycleService; diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index 303be1cfc2..e9989937e7 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -61,7 +61,7 @@ import lombok.extern.slf4j.Slf4j; @Singleton class BurningManService { private static final int DAY_AS_BLOCKS = 144; - static final int MONTH_AS_BLOCKS = DevEnv.isDevMode() ? 13 : 30 * DAY_AS_BLOCKS; // Ignore 31 days months, as the block time is anyway not exact. + static final int MONTH_AS_BLOCKS = DevEnv.isDevTesting() ? 13 : 30 * DAY_AS_BLOCKS; // Ignore 31 days months, as the block time is anyway not exact. static final int YEAR_AS_BLOCKS = 12 * MONTH_AS_BLOCKS; // Parameters diff --git a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java index c8f80216c7..eee6b54614 100644 --- a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java +++ b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java @@ -65,7 +65,7 @@ public class DelayedPayoutTxReceiverService implements DaoStateListener { private static final long DPT_MIN_TX_FEE_RATE = 10; public static boolean isActivated() { - return DevEnv.isDevMode() || new Date().after(ACTIVATION_DATE); + return DevEnv.isDevTesting() || new Date().after(ACTIVATION_DATE); } diff --git a/core/src/main/java/bisq/core/trade/TradeManager.java b/core/src/main/java/bisq/core/trade/TradeManager.java index 208a650e6e..232a6c07f8 100644 --- a/core/src/main/java/bisq/core/trade/TradeManager.java +++ b/core/src/main/java/bisq/core/trade/TradeManager.java @@ -77,6 +77,7 @@ import bisq.network.p2p.P2PService; import bisq.network.p2p.network.TorNetworkNode; import bisq.common.ClockWatcher; +import bisq.common.app.DevEnv; import bisq.common.config.Config; import bisq.common.crypto.KeyRing; import bisq.common.handlers.ErrorMessageHandler; @@ -730,6 +731,9 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi clockWatcher.addListener(new ClockWatcher.Listener() { @Override public void onSecondTick() { + if (DevEnv.isDevTesting()) { + updateTradePeriodState(); + } } @Override @@ -744,6 +748,9 @@ public class TradeManager implements PersistedDataHost, DecryptedDirectMessageLi if (!trade.isPayoutPublished()) { Date maxTradePeriodDate = trade.getMaxTradePeriodDate(); Date halfTradePeriodDate = trade.getHalfTradePeriodDate(); + if (DevEnv.isDevTesting()) { + trade.setTradePeriodState(Trade.TradePeriodState.TRADE_PERIOD_OVER); + } if (maxTradePeriodDate != null && halfTradePeriodDate != null) { Date now = new Date(); if (now.after(maxTradePeriodDate)) { diff --git a/desktop/src/main/java/bisq/desktop/main/MainViewModel.java b/desktop/src/main/java/bisq/desktop/main/MainViewModel.java index 3eb0283a32..91caddb09c 100644 --- a/desktop/src/main/java/bisq/desktop/main/MainViewModel.java +++ b/desktop/src/main/java/bisq/desktop/main/MainViewModel.java @@ -274,7 +274,7 @@ public class MainViewModel implements ViewModel, BisqSetup.BisqSetupListener { break; case TRADE_PERIOD_OVER: key = "displayTradePeriodOver" + trade.getId(); - if (DontShowAgainLookup.showAgain(key)) { + if (DontShowAgainLookup.showAgain(key) && !DevEnv.isDevTesting()) { DontShowAgainLookup.dontShowAgain(key, true); new Popup().warning(Res.get("popup.warning.tradePeriod.ended", trade.getShortId(), From 625939b0f94a20f1b65e3b6244efed5490205f9c Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 7 Nov 2022 17:59:51 -0500 Subject: [PATCH 38/86] Bugfix: set burningManSelectionHeight and tradeTxFee at dispute clone Signed-off-by: HenrikJannsen --- .../src/main/java/bisq/core/support/dispute/DisputeManager.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/src/main/java/bisq/core/support/dispute/DisputeManager.java b/core/src/main/java/bisq/core/support/dispute/DisputeManager.java index 88e5b86f6f..e64ac9a78d 100644 --- a/core/src/main/java/bisq/core/support/dispute/DisputeManager.java +++ b/core/src/main/java/bisq/core/support/dispute/DisputeManager.java @@ -624,6 +624,8 @@ public abstract class DisputeManager> extends Sup dispute.setExtraDataMap(disputeFromOpener.getExtraDataMap()); dispute.setDelayedPayoutTxId(disputeFromOpener.getDelayedPayoutTxId()); dispute.setDonationAddressOfDelayedPayoutTx(disputeFromOpener.getDonationAddressOfDelayedPayoutTx()); + dispute.setBurningManSelectionHeight(disputeFromOpener.getBurningManSelectionHeight()); + dispute.setTradeTxFee(disputeFromOpener.getTradeTxFee()); Optional storedDisputeOptional = findDispute(dispute); From 1e8ec6f2062de995fdfe9a359f60c43cf0d05e81 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 7 Nov 2022 18:00:16 -0500 Subject: [PATCH 39/86] Add details if donationAddressOfDelayedPayoutTx check fails Signed-off-by: HenrikJannsen --- .../java/bisq/core/support/dispute/DisputeValidation.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/bisq/core/support/dispute/DisputeValidation.java b/core/src/main/java/bisq/core/support/dispute/DisputeValidation.java index 2fe0b8d7e1..bbb4ac0cb3 100644 --- a/core/src/main/java/bisq/core/support/dispute/DisputeValidation.java +++ b/core/src/main/java/bisq/core/support/dispute/DisputeValidation.java @@ -171,7 +171,9 @@ public class DisputeValidation { // Verify that address in the dispute matches the one in the trade. String delayedPayoutTxOutputAddress = address.toString(); checkArgument(delayedPayoutTxOutputAddress.equals(dispute.getDonationAddressOfDelayedPayoutTx()), - "donationAddressOfDelayedPayoutTx from dispute does not match address from delayed payout tx"); + "donationAddressOfDelayedPayoutTx from dispute does not match address from delayed payout tx. " + + "delayedPayoutTxOutputAddress=" + delayedPayoutTxOutputAddress + + "; dispute.getDonationAddressOfDelayedPayoutTx()=" + dispute.getDonationAddressOfDelayedPayoutTx()); } public static void testIfAnyDisputeTriedReplay(List disputeList, From 46776eeddcdeee40e5a7492939a450deda30984b Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 7 Nov 2022 18:01:32 -0500 Subject: [PATCH 40/86] Use null as default value for donationAddressString Signed-off-by: HenrikJannsen --- .../main/portfolio/pendingtrades/PendingTradesDataModel.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesDataModel.java b/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesDataModel.java index 6f6af705c6..519dba1295 100644 --- a/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesDataModel.java +++ b/desktop/src/main/java/bisq/desktop/main/portfolio/pendingtrades/PendingTradesDataModel.java @@ -511,7 +511,7 @@ public class PendingTradesDataModel extends ActivatableDataModel { boolean useRefundAgent = disputeState == Trade.DisputeState.MEDIATION_CLOSED || disputeState == Trade.DisputeState.REFUND_REQUESTED || remainingLockTime <= 0; - AtomicReference donationAddressString = new AtomicReference<>(""); + AtomicReference donationAddressString = new AtomicReference<>(null); Transaction delayedPayoutTx = trade.getDelayedPayoutTx(); try { TradeDataValidation.validateDelayedPayoutTx(trade, From 516004dfaf14e11a869f693b336e56b12e59ce6f Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Tue, 8 Nov 2022 10:55:26 -0500 Subject: [PATCH 41/86] Change ISSUANCE_BOOST_FACTOR to 3 Use lower dev test value for BURN_TARGET_BOOST_AMOUNT Signed-off-by: HenrikJannsen --- .../main/java/bisq/core/dao/burningman/BurnTargetService.java | 1 - .../core/dao/burningman/BurningManPresentationService.java | 4 +++- .../main/java/bisq/core/dao/burningman/BurningManService.java | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java index 3f21e781b5..78ba026658 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java @@ -107,7 +107,6 @@ class BurnTargetService { // Distributed BurningMen long burnedAmountFromBurningMen = getBurnedAmountFromBurningMen(burningManCandidates, chainHeight, fromBlock); - long burnTarget = accumulatedReimbursements + accumulatedEstimatedBtcTradeFees - burnedAmountFromLegacyBurningManDPT diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java index 58e3968a1e..ac58a8f4f2 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java @@ -25,6 +25,8 @@ import bisq.core.dao.state.model.blockchain.Block; import bisq.core.dao.state.model.governance.CompensationProposal; import bisq.core.dao.state.model.governance.Proposal; +import bisq.common.app.DevEnv; + import javax.inject.Inject; import javax.inject.Singleton; @@ -42,7 +44,7 @@ import lombok.extern.slf4j.Slf4j; public class BurningManPresentationService implements DaoStateListener { // Burn target gets increased by that amount to give more flexibility. // Burn target is calculated from reimbursements + estimated BTC fees - burned amounts. - static final long BURN_TARGET_BOOST_AMOUNT = 10000000; + static final long BURN_TARGET_BOOST_AMOUNT = DevEnv.isDevTesting() ? 1000000 : 10000000; private final DaoStateService daoStateService; private final MyProposalListService myProposalListService; diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index e9989937e7..d353370f60 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -85,7 +85,7 @@ class BurningManService { // and compensates for those who do not burn. The burn share is capped by that factor as well. // E.g. a contributor with 10% issuance share will be able to receive max 20% of the BTC fees or DPT output // even if they would have burned more and had a higher burn share than 20%. - static final double ISSUANCE_BOOST_FACTOR = 2; + static final double ISSUANCE_BOOST_FACTOR = 3; private final DaoStateService daoStateService; From 2799ccabad99f04b9f52da07dfd19e60484dca96 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Tue, 8 Nov 2022 12:02:59 -0500 Subject: [PATCH 42/86] Add util class for cycle related methods with caching Add getCycleAtIndex convenience method to DaoStateService Signed-off-by: HenrikJannsen --- .../core/dao/CyclesInDaoStateService.java | 97 +++++++++++++++++++ .../bisq/core/dao/state/DaoStateService.java | 4 + 2 files changed, 101 insertions(+) create mode 100644 core/src/main/java/bisq/core/dao/CyclesInDaoStateService.java diff --git a/core/src/main/java/bisq/core/dao/CyclesInDaoStateService.java b/core/src/main/java/bisq/core/dao/CyclesInDaoStateService.java new file mode 100644 index 0000000000..786c8320e0 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/CyclesInDaoStateService.java @@ -0,0 +1,97 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao; + +import bisq.core.dao.governance.period.CycleService; +import bisq.core.dao.state.DaoStateService; +import bisq.core.dao.state.model.governance.Cycle; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import lombok.extern.slf4j.Slf4j; + +/** + * Utility methods for Cycle related methods. + * As they might be called often we use caching. + */ +@Slf4j +@Singleton +public class CyclesInDaoStateService { + private final DaoStateService daoStateService; + private final CycleService cycleService; + + // Cached results + private final Map cyclesByHeight = new HashMap<>(); + private final Map indexByCycle = new HashMap<>(); + private final Map cyclesByIndex = new HashMap<>(); + + @Inject + public CyclesInDaoStateService(DaoStateService daoStateService, CycleService cycleService) { + this.daoStateService = daoStateService; + this.cycleService = cycleService; + } + + public int getCycleIndexAtChainHeight(int chainHeight) { + return findCycleAtHeight(chainHeight) + .map(cycleService::getCycleIndex) + .orElse(-1); + } + + public int getHeightOfFirstBlockOfPastCycle(int chainHeight, int numPastCycles) { + return findCycleAtHeight(chainHeight) + .map(cycle -> { + int cycleIndex = getIndexForCycle(cycle); + int targetIndex = cycleIndex - numPastCycles; + return getCycleAtIndex(targetIndex); + }) + .map(Cycle::getHeightOfFirstBlock) + .orElse(daoStateService.getGenesisBlockHeight()); + } + + private Cycle getCycleAtIndex(int index) { + return Optional.ofNullable(cyclesByIndex.get(index)) + .orElseGet(() -> { + Cycle cycle = daoStateService.getCycleAtIndex(index); + cyclesByIndex.put(index, cycle); + return cycle; + }); + } + + private int getIndexForCycle(Cycle cycle) { + return Optional.ofNullable(indexByCycle.get(cycle)) + .orElseGet(() -> { + int index = cycleService.getCycleIndex(cycle); + indexByCycle.put(cycle, index); + return index; + }); + } + + private Optional findCycleAtHeight(int chainHeight) { + return Optional.ofNullable(cyclesByHeight.get(chainHeight)) + .or(() -> { + Optional optionalCycle = daoStateService.getCycle(chainHeight); + optionalCycle.ifPresent(cycle -> cyclesByHeight.put(chainHeight, cycle)); + return optionalCycle; + }); + } +} diff --git a/core/src/main/java/bisq/core/dao/state/DaoStateService.java b/core/src/main/java/bisq/core/dao/state/DaoStateService.java index 0f61aa52b2..e71ca09b6c 100644 --- a/core/src/main/java/bisq/core/dao/state/DaoStateService.java +++ b/core/src/main/java/bisq/core/dao/state/DaoStateService.java @@ -223,6 +223,10 @@ public class DaoStateService implements DaoSetupService { return previous; } + public Cycle getCycleAtIndex(int index) { + return getCycles().get(index); + } + /////////////////////////////////////////////////////////////////////////////////////////// // Block From 683bc409c793ed12a4687917810481bd82787619 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Tue, 8 Nov 2022 12:05:27 -0500 Subject: [PATCH 43/86] Use cycles for periods instead of blocks in months/years. A cycle is the fundamental unit in the DAO, months/years have no relevance, so using cycles as base helps avoids some potential weird behaviour with data getting updated at cycle events. Signed-off-by: HenrikJannsen --- .../dao/burningman/BurnTargetService.java | 29 +++++++-------- .../dao/burningman/BurningManService.java | 37 +++++++------------ 2 files changed, 27 insertions(+), 39 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java index 78ba026658..b72d46e19d 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java @@ -17,8 +17,8 @@ package bisq.core.dao.burningman; +import bisq.core.dao.CyclesInDaoStateService; import bisq.core.dao.governance.param.Param; -import bisq.core.dao.governance.period.CycleService; import bisq.core.dao.governance.proposal.ProposalService; import bisq.core.dao.governance.proposal.storage.appendonly.ProposalPayload; import bisq.core.dao.state.DaoStateService; @@ -50,27 +50,28 @@ import lombok.extern.slf4j.Slf4j; @Singleton class BurnTargetService { // Number of cycles for accumulating reimbursement amounts. Used for the burn target. - private static final int NUM_MONTHS_BURN_TARGET = 12; - private static final int NUM_MONTHS_AVERAGE_DISTRIBUTION = 3; + private static final int NUM_CYCLES_BURN_TARGET = 12; + private static final int NUM_CYCLES_AVERAGE_DISTRIBUTION = 3; // Default value for the estimated BTC trade fees per month as BSQ sat value (100 sat = 1 BSQ). // Default is roughly average of last 12 months at Nov 2022. // Can be changed with DAO parameter voting. - private static final long DEFAULT_ESTIMATED_BTC_FEES = DevEnv.isDevTesting() ? 100000 : 6200000; + private static final long DEFAULT_ESTIMATED_BTC_TRADE_FEE_REVENUE_PER_CYCLE = DevEnv.isDevTesting() ? 100000 : 6200000; private final DaoStateService daoStateService; - private final CycleService cycleService; + private final CyclesInDaoStateService cyclesInDaoStateService; private final ProposalService proposalService; @Inject public BurnTargetService(DaoStateService daoStateService, - CycleService cycleService, + CyclesInDaoStateService cyclesInDaoStateService, ProposalService proposalService) { this.daoStateService = daoStateService; - this.cycleService = cycleService; + this.cyclesInDaoStateService = cyclesInDaoStateService; this.proposalService = proposalService; } + /////////////////////////////////////////////////////////////////////////////////////////// // API /////////////////////////////////////////////////////////////////////////////////////////// @@ -84,7 +85,7 @@ class BurnTargetService { int issuanceHeight = issuance.getChainHeight(); long issuanceAmount = issuance.getAmount(); long issuanceDate = daoStateService.getBlockTime(issuanceHeight); - int cycleIndex = getCycleIndex(issuanceHeight); + int cycleIndex = cyclesInDaoStateService.getCycleIndexAtChainHeight(issuanceHeight); reimbursements.add(new ReimbursementModel( issuanceAmount, issuanceHeight, @@ -95,7 +96,7 @@ class BurnTargetService { } long getBurnTarget(int chainHeight, Collection burningManCandidates) { - int fromBlock = chainHeight - NUM_MONTHS_BURN_TARGET * BurningManService.MONTH_AS_BLOCKS; + int fromBlock = cyclesInDaoStateService.getHeightOfFirstBlockOfPastCycle(chainHeight, NUM_CYCLES_BURN_TARGET); long accumulatedReimbursements = getAccumulatedReimbursements(chainHeight, fromBlock); long accumulatedEstimatedBtcTradeFees = getAccumulatedEstimatedBtcTradeFees(chainHeight, fromBlock); @@ -129,10 +130,10 @@ class BurnTargetService { } long getAverageDistributionPerCycle(int chainHeight) { - int fromBlock = chainHeight - NUM_MONTHS_AVERAGE_DISTRIBUTION * BurningManService.MONTH_AS_BLOCKS; + int fromBlock = cyclesInDaoStateService.getHeightOfFirstBlockOfPastCycle(chainHeight, NUM_CYCLES_AVERAGE_DISTRIBUTION); long reimbursements = getAccumulatedReimbursements(chainHeight, fromBlock); long btcTradeFees = getAccumulatedEstimatedBtcTradeFees(chainHeight, fromBlock); - return Math.round((reimbursements + btcTradeFees) / (double) NUM_MONTHS_AVERAGE_DISTRIBUTION); + return Math.round((reimbursements + btcTradeFees) / (double) NUM_CYCLES_AVERAGE_DISTRIBUTION); } @@ -148,10 +149,6 @@ class BurnTargetService { .map(proposal -> (ReimbursementProposal) proposal); } - private int getCycleIndex(int height) { - return daoStateService.getCycle(height).map(cycleService::getCycleIndex).orElse(0); - } - private long getAccumulatedReimbursements(int chainHeight, int fromBlock) { return getReimbursements(chainHeight).stream() .filter(reimbursementModel -> reimbursementModel.getHeight() >= fromBlock) @@ -170,7 +167,7 @@ class BurnTargetService { private long getBtcTradeFeeFromParam(Cycle cycle) { int value = daoStateService.getParamValueAsBlock(Param.LOCK_TIME_TRADE_PAYOUT, cycle.getHeightOfFirstBlock()); // Ignore default value (4320) - return value != 4320 ? value : DEFAULT_ESTIMATED_BTC_FEES; + return value != 4320 ? value : DEFAULT_ESTIMATED_BTC_TRADE_FEE_REVENUE_PER_CYCLE; } private Set getProofOfBurnTxs(int chainHeight, int fromBlock) { diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index d353370f60..c78d70ae9d 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -17,8 +17,8 @@ package bisq.core.dao.burningman; +import bisq.core.dao.CyclesInDaoStateService; import bisq.core.dao.governance.param.Param; -import bisq.core.dao.governance.period.CycleService; import bisq.core.dao.governance.proofofburn.ProofOfBurnConsensus; import bisq.core.dao.governance.proposal.ProposalService; import bisq.core.dao.governance.proposal.storage.appendonly.ProposalPayload; @@ -32,8 +32,6 @@ import bisq.core.dao.state.model.governance.IssuanceType; import bisq.network.p2p.storage.P2PDataStorage; -import bisq.common.app.DevEnv; - import javax.inject.Inject; import javax.inject.Singleton; @@ -60,10 +58,6 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @Singleton class BurningManService { - private static final int DAY_AS_BLOCKS = 144; - static final int MONTH_AS_BLOCKS = DevEnv.isDevTesting() ? 13 : 30 * DAY_AS_BLOCKS; // Ignore 31 days months, as the block time is anyway not exact. - static final int YEAR_AS_BLOCKS = 12 * MONTH_AS_BLOCKS; - // Parameters // Cannot be changed after release as it would break trade protocol verification of DPT receivers. @@ -74,11 +68,11 @@ class BurningManService { // Factor for weighting the genesis output amounts. private static final double GENESIS_OUTPUT_AMOUNT_FACTOR = 0.05; - // The max. age in blocks for the decay function used for compensation request amounts. - private static final int MAX_COMP_REQUEST_AGE = 2 * YEAR_AS_BLOCKS; + // The number of cycles we go back for the decay function used for compensation request amounts. + private static final int NUM_CYCLES_COMP_REQUEST_DECAY = 24; - // The max. age in blocks for the decay function used for burned amounts. - private static final int MAX_BURN_AMOUNT_AGE = YEAR_AS_BLOCKS; + // The number of cycles we go back for the decay function used for burned amounts. + private static final int NUM_CYCLES_BURN_AMOUNT_DECAY = 12; // Factor for boosting the issuance share (issuance is compensation requests + genesis output). // This will be used for increasing the allowed burn amount. The factor gives more flexibility @@ -89,15 +83,15 @@ class BurningManService { private final DaoStateService daoStateService; - private final CycleService cycleService; + private final CyclesInDaoStateService cyclesInDaoStateService; private final ProposalService proposalService; @Inject public BurningManService(DaoStateService daoStateService, - CycleService cycleService, + CyclesInDaoStateService cyclesInDaoStateService, ProposalService proposalService) { this.daoStateService = daoStateService; - this.cycleService = cycleService; + this.cyclesInDaoStateService = cyclesInDaoStateService; this.proposalService = proposalService; } @@ -126,7 +120,7 @@ class BurningManService { .ifPresent(address -> { int issuanceHeight = issuance.getChainHeight(); long issuanceAmount = getIssuanceAmountForCompensationRequest(issuance); - int cycleIndex = getCycleIndex(issuanceHeight); + int cycleIndex = cyclesInDaoStateService.getCycleIndexAtChainHeight(issuanceHeight); if (isValidReimbursement(name, cycleIndex, issuanceAmount)) { long decayedIssuanceAmount = getDecayedCompensationAmount(issuanceAmount, issuanceHeight, chainHeight); long issuanceDate = daoStateService.getBlockTime(issuanceHeight); @@ -232,11 +226,6 @@ class BurningManService { } } - private int getCycleIndex(int height) { - return daoStateService.getCycle(height).map(cycleService::getCycleIndex).orElse(0); - } - - private boolean isValidReimbursement(String name, int cycleIndex, long issuanceAmount) { // Up to cycle 15 the RefundAgent made reimbursement requests as compensation requests. We filter out those entries. // As it is mixed with RefundAgents real compensation requests we take out all above 3500 BSQ. @@ -245,7 +234,8 @@ class BurningManService { } private long getDecayedCompensationAmount(long amount, int issuanceHeight, int chainHeight) { - return getDecayedAmount(amount, issuanceHeight, chainHeight, chainHeight - MAX_COMP_REQUEST_AGE, 0); + int fromHeight = cyclesInDaoStateService.getHeightOfFirstBlockOfPastCycle(chainHeight, NUM_CYCLES_COMP_REQUEST_DECAY); + return getDecayedAmount(amount, issuanceHeight, chainHeight, fromHeight, 0); } // Linear decay between currentBlockHeight (100% of amount) and issuanceHeight (firstBlockOffset % of amount) @@ -283,7 +273,7 @@ class BurningManService { long burnOutputAmount = optionalTx.map(Tx::getBurntBsq).orElse(0L); long decayedBurnOutputAmount = getDecayedBurnedAmount(burnOutputAmount, burnOutputHeight, chainHeight); long date = optionalTx.map(BaseTx::getTime).orElse(0L); - int cycleIndex = getCycleIndex(burnOutputHeight); + int cycleIndex = cyclesInDaoStateService.getCycleIndexAtChainHeight(burnOutputHeight); candidate.addBurnOutputModel(new BurnOutputModel(burnOutputAmount, decayedBurnOutputAmount, burnOutputHeight, @@ -306,10 +296,11 @@ class BurningManService { } private long getDecayedBurnedAmount(long amount, int issuanceHeight, int chainHeight) { + int fromHeight = cyclesInDaoStateService.getHeightOfFirstBlockOfPastCycle(chainHeight, NUM_CYCLES_BURN_AMOUNT_DECAY); return getDecayedAmount(amount, issuanceHeight, chainHeight, - chainHeight - MAX_BURN_AMOUNT_AGE, + fromHeight, 0); } From 3213c5e770f2462960d960f6202cce72f73bfffe Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Wed, 9 Nov 2022 10:24:39 -0500 Subject: [PATCH 44/86] Avoid negative cycle index Signed-off-by: HenrikJannsen --- .../main/java/bisq/core/dao/CyclesInDaoStateService.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/CyclesInDaoStateService.java b/core/src/main/java/bisq/core/dao/CyclesInDaoStateService.java index 786c8320e0..25997af605 100644 --- a/core/src/main/java/bisq/core/dao/CyclesInDaoStateService.java +++ b/core/src/main/java/bisq/core/dao/CyclesInDaoStateService.java @@ -61,7 +61,7 @@ public class CyclesInDaoStateService { return findCycleAtHeight(chainHeight) .map(cycle -> { int cycleIndex = getIndexForCycle(cycle); - int targetIndex = cycleIndex - numPastCycles; + int targetIndex = Math.max(0, (cycleIndex - numPastCycles)); return getCycleAtIndex(targetIndex); }) .map(Cycle::getHeightOfFirstBlock) @@ -69,10 +69,11 @@ public class CyclesInDaoStateService { } private Cycle getCycleAtIndex(int index) { - return Optional.ofNullable(cyclesByIndex.get(index)) + int cycleIndex = Math.max(0, index); + return Optional.ofNullable(cyclesByIndex.get(cycleIndex)) .orElseGet(() -> { - Cycle cycle = daoStateService.getCycleAtIndex(index); - cyclesByIndex.put(index, cycle); + Cycle cycle = daoStateService.getCycleAtIndex(cycleIndex); + cyclesByIndex.put(cycleIndex, cycle); return cycle; }); } From c747a486a7c215e91ca8cb1a491b971905235f42 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Wed, 9 Nov 2022 12:54:09 -0500 Subject: [PATCH 45/86] Fix duration calculations Signed-off-by: HenrikJannsen --- .../core/dao/CyclesInDaoStateService.java | 34 +++++++++++++-- .../dao/burningman/BurnTargetService.java | 41 ++++++++++++------- .../dao/burningman/BurningManService.java | 4 +- 3 files changed, 59 insertions(+), 20 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/CyclesInDaoStateService.java b/core/src/main/java/bisq/core/dao/CyclesInDaoStateService.java index 25997af605..a6cfcd996d 100644 --- a/core/src/main/java/bisq/core/dao/CyclesInDaoStateService.java +++ b/core/src/main/java/bisq/core/dao/CyclesInDaoStateService.java @@ -20,6 +20,7 @@ package bisq.core.dao; import bisq.core.dao.governance.period.CycleService; import bisq.core.dao.state.DaoStateService; import bisq.core.dao.state.model.governance.Cycle; +import bisq.core.dao.state.model.governance.DaoPhase; import javax.inject.Inject; import javax.inject.Singleton; @@ -57,6 +58,33 @@ public class CyclesInDaoStateService { .orElse(-1); } + public int getHeightOfFirstBlockOfResultPhaseOfPastCycle(int chainHeight, int numPastCycles) { + return findCycleAtHeight(chainHeight) + .map(cycle -> { + int cycleIndex = getIndexForCycle(cycle); + int targetIndex = Math.max(0, (cycleIndex - numPastCycles)); + return getCycleAtIndex(targetIndex); + }) + .map(cycle -> cycle.getFirstBlockOfPhase(DaoPhase.Phase.RESULT)) + .orElse(daoStateService.getGenesisBlockHeight()); + } + + /** + * + * @param chainHeight Chain height from where we start + * @param numPastCycles Number of past cycles + * @return The height at the same offset from the first block of the cycle as in the current cycle minus the past cycles. + */ + public int getChainHeightOfPastCycle(int chainHeight, int numPastCycles) { + return getHeightOfFirstBlockOfPastCycle(chainHeight, numPastCycles) + getOffsetFromFirstBlockInCycle(chainHeight); + } + + public Integer getOffsetFromFirstBlockInCycle(int chainHeight) { + return daoStateService.getCycle(chainHeight) + .map(c -> chainHeight - c.getHeightOfFirstBlock()) + .orElse(0); + } + public int getHeightOfFirstBlockOfPastCycle(int chainHeight, int numPastCycles) { return findCycleAtHeight(chainHeight) .map(cycle -> { @@ -68,7 +96,7 @@ public class CyclesInDaoStateService { .orElse(daoStateService.getGenesisBlockHeight()); } - private Cycle getCycleAtIndex(int index) { + public Cycle getCycleAtIndex(int index) { int cycleIndex = Math.max(0, index); return Optional.ofNullable(cyclesByIndex.get(cycleIndex)) .orElseGet(() -> { @@ -78,7 +106,7 @@ public class CyclesInDaoStateService { }); } - private int getIndexForCycle(Cycle cycle) { + public int getIndexForCycle(Cycle cycle) { return Optional.ofNullable(indexByCycle.get(cycle)) .orElseGet(() -> { int index = cycleService.getCycleIndex(cycle); @@ -87,7 +115,7 @@ public class CyclesInDaoStateService { }); } - private Optional findCycleAtHeight(int chainHeight) { + public Optional findCycleAtHeight(int chainHeight) { return Optional.ofNullable(cyclesByHeight.get(chainHeight)) .or(() -> { Optional optionalCycle = daoStateService.getCycle(chainHeight); diff --git a/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java index b72d46e19d..30a0ec4d40 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java @@ -96,17 +96,21 @@ class BurnTargetService { } long getBurnTarget(int chainHeight, Collection burningManCandidates) { - int fromBlock = cyclesInDaoStateService.getHeightOfFirstBlockOfPastCycle(chainHeight, NUM_CYCLES_BURN_TARGET); - long accumulatedReimbursements = getAccumulatedReimbursements(chainHeight, fromBlock); - long accumulatedEstimatedBtcTradeFees = getAccumulatedEstimatedBtcTradeFees(chainHeight, fromBlock); + // Reimbursements are taken into account at result vote block + int chainHeightOfPastCycle = cyclesInDaoStateService.getChainHeightOfPastCycle(chainHeight, NUM_CYCLES_BURN_TARGET); + long accumulatedReimbursements = getAccumulatedReimbursements(chainHeight, chainHeightOfPastCycle); + + // Param changes are taken into account at first block at next cycle after voting + int heightOfFirstBlockOfPastCycle = cyclesInDaoStateService.getHeightOfFirstBlockOfPastCycle(chainHeight, NUM_CYCLES_BURN_TARGET - 1); + long accumulatedEstimatedBtcTradeFees = getAccumulatedEstimatedBtcTradeFees(chainHeight, heightOfFirstBlockOfPastCycle); // Legacy BurningMan - Set proofOfBurnTxs = getProofOfBurnTxs(chainHeight, fromBlock); - long burnedAmountFromLegacyBurningManDPT = getBurnedAmountFromLegacyBurningManDPT(proofOfBurnTxs, chainHeight, fromBlock); - long burnedAmountFromLegacyBurningMansBtcFees = getBurnedAmountFromLegacyBurningMansBtcFees(proofOfBurnTxs, chainHeight, fromBlock); + Set proofOfBurnTxs = getProofOfBurnTxs(chainHeight, chainHeightOfPastCycle); + long burnedAmountFromLegacyBurningManDPT = getBurnedAmountFromLegacyBurningManDPT(proofOfBurnTxs, chainHeight, chainHeightOfPastCycle); + long burnedAmountFromLegacyBurningMansBtcFees = getBurnedAmountFromLegacyBurningMansBtcFees(proofOfBurnTxs, chainHeight, chainHeightOfPastCycle); // Distributed BurningMen - long burnedAmountFromBurningMen = getBurnedAmountFromBurningMen(burningManCandidates, chainHeight, fromBlock); + long burnedAmountFromBurningMen = getBurnedAmountFromBurningMen(burningManCandidates, chainHeight, chainHeightOfPastCycle); long burnTarget = accumulatedReimbursements + accumulatedEstimatedBtcTradeFees @@ -130,9 +134,14 @@ class BurnTargetService { } long getAverageDistributionPerCycle(int chainHeight) { - int fromBlock = cyclesInDaoStateService.getHeightOfFirstBlockOfPastCycle(chainHeight, NUM_CYCLES_AVERAGE_DISTRIBUTION); - long reimbursements = getAccumulatedReimbursements(chainHeight, fromBlock); - long btcTradeFees = getAccumulatedEstimatedBtcTradeFees(chainHeight, fromBlock); + // Reimbursements are taken into account at result vote block + int chainHeightOfPastCycle = cyclesInDaoStateService.getChainHeightOfPastCycle(chainHeight, NUM_CYCLES_AVERAGE_DISTRIBUTION); + long reimbursements = getAccumulatedReimbursements(chainHeight, chainHeightOfPastCycle); + + // Param changes are taken into account at first block at next cycle after voting + int firstBlockOfPastCycle = cyclesInDaoStateService.getHeightOfFirstBlockOfPastCycle(chainHeight, NUM_CYCLES_AVERAGE_DISTRIBUTION - 1); + long btcTradeFees = getAccumulatedEstimatedBtcTradeFees(chainHeight, firstBlockOfPastCycle); + return Math.round((reimbursements + btcTradeFees) / (double) NUM_CYCLES_AVERAGE_DISTRIBUTION); } @@ -151,11 +160,13 @@ class BurnTargetService { private long getAccumulatedReimbursements(int chainHeight, int fromBlock) { return getReimbursements(chainHeight).stream() - .filter(reimbursementModel -> reimbursementModel.getHeight() >= fromBlock) + .filter(reimbursementModel -> reimbursementModel.getHeight() > fromBlock) + .filter(reimbursementModel -> reimbursementModel.getHeight() <= chainHeight) .mapToLong(ReimbursementModel::getAmount) .sum(); } + // The BTC fees are set by parameter and becomes active at first block of the next cycle after voting. private long getAccumulatedEstimatedBtcTradeFees(int chainHeight, int fromBlock) { return daoStateService.getCycles().stream() .filter(cycle -> cycle.getHeightOfFirstBlock() >= fromBlock) @@ -172,7 +183,7 @@ class BurnTargetService { private Set getProofOfBurnTxs(int chainHeight, int fromBlock) { return daoStateService.getProofOfBurnTxs().stream() - .filter(tx -> tx.getBlockHeight() >= fromBlock) + .filter(tx -> tx.getBlockHeight() > fromBlock) .filter(tx -> tx.getBlockHeight() <= chainHeight) .collect(Collectors.toSet()); } @@ -184,7 +195,7 @@ class BurnTargetService { // opReturn data from delayed payout txs when BM traded with the refund agent: 1701e47e5d8030f444c182b5e243871ebbaeadb5e82f // opReturn data from delayed payout txs when BM traded with traders who got reimbursed by the DAO: 1701293c488822f98e70e047012f46f5f1647f37deb7 return proofOfBurnTxs.stream() - .filter(tx -> tx.getBlockHeight() >= fromBlock) + .filter(tx -> tx.getBlockHeight() > fromBlock) .filter(tx -> tx.getBlockHeight() <= chainHeight) .filter(tx -> { String hash = Hex.encode(tx.getLastTxOutput().getOpReturnData()); @@ -201,7 +212,7 @@ class BurnTargetService { // opReturn data from delayed payout txs when BM traded with the refund agent: 1701e47e5d8030f444c182b5e243871ebbaeadb5e82f // opReturn data from delayed payout txs when BM traded with traders who got reimbursed by the DAO: 1701293c488822f98e70e047012f46f5f1647f37deb7 return proofOfBurnTxs.stream() - .filter(tx -> tx.getBlockHeight() >= fromBlock) + .filter(tx -> tx.getBlockHeight() > fromBlock) .filter(tx -> tx.getBlockHeight() <= chainHeight) .filter(tx -> "1701721206fe6b40777763de1c741f4fd2706d94775d".equals(Hex.encode(tx.getLastTxOutput().getOpReturnData()))) .mapToLong(Tx::getBurntBsq) @@ -213,7 +224,7 @@ class BurnTargetService { int fromBlock) { return burningManCandidates.stream() .map(burningManCandidate -> burningManCandidate.getBurnOutputModels().stream() - .filter(burnOutputModel -> burnOutputModel.getHeight() >= fromBlock) + .filter(burnOutputModel -> burnOutputModel.getHeight() > fromBlock) .filter(burnOutputModel -> burnOutputModel.getHeight() <= chainHeight) .mapToLong(BurnOutputModel::getAmount) .sum()) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index c78d70ae9d..d0612519e6 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -234,7 +234,7 @@ class BurningManService { } private long getDecayedCompensationAmount(long amount, int issuanceHeight, int chainHeight) { - int fromHeight = cyclesInDaoStateService.getHeightOfFirstBlockOfPastCycle(chainHeight, NUM_CYCLES_COMP_REQUEST_DECAY); + int fromHeight = cyclesInDaoStateService.getChainHeightOfPastCycle(chainHeight, NUM_CYCLES_COMP_REQUEST_DECAY); return getDecayedAmount(amount, issuanceHeight, chainHeight, fromHeight, 0); } @@ -296,7 +296,7 @@ class BurningManService { } private long getDecayedBurnedAmount(long amount, int issuanceHeight, int chainHeight) { - int fromHeight = cyclesInDaoStateService.getHeightOfFirstBlockOfPastCycle(chainHeight, NUM_CYCLES_BURN_AMOUNT_DECAY); + int fromHeight = cyclesInDaoStateService.getChainHeightOfPastCycle(chainHeight, NUM_CYCLES_BURN_AMOUNT_DECAY); return getDecayedAmount(amount, issuanceHeight, chainHeight, From 3a7af07e86b232b7fe92be79df714cb3b2dd18f1 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Wed, 9 Nov 2022 21:24:56 -0500 Subject: [PATCH 46/86] Improve burn target calculation and display Signed-off-by: HenrikJannsen --- .../core/dao/CyclesInDaoStateService.java | 15 +- .../dao/burningman/BurnTargetService.java | 23 ++- .../BurningManPresentationService.java | 58 ++++++-- .../dao/burningman/BurningManService.java | 6 +- .../dao/burningman/ReimbursementModel.java | 6 +- .../bisq/core/util/coin/BsqFormatter.java | 4 + .../resources/i18n/displayStrings.properties | 10 +- .../BurningManPresentationServiceTest.java | 135 ++++++++++++++++++ .../burningmen/BurningmenListItem.java | 23 +-- .../burnbsq/burningmen/BurningmenView.java | 50 ++++--- 10 files changed, 278 insertions(+), 52 deletions(-) create mode 100644 core/src/test/java/bisq/core/dao/burningman/BurningManPresentationServiceTest.java diff --git a/core/src/main/java/bisq/core/dao/CyclesInDaoStateService.java b/core/src/main/java/bisq/core/dao/CyclesInDaoStateService.java index a6cfcd996d..753d6ad936 100644 --- a/core/src/main/java/bisq/core/dao/CyclesInDaoStateService.java +++ b/core/src/main/java/bisq/core/dao/CyclesInDaoStateService.java @@ -76,7 +76,11 @@ public class CyclesInDaoStateService { * @return The height at the same offset from the first block of the cycle as in the current cycle minus the past cycles. */ public int getChainHeightOfPastCycle(int chainHeight, int numPastCycles) { - return getHeightOfFirstBlockOfPastCycle(chainHeight, numPastCycles) + getOffsetFromFirstBlockInCycle(chainHeight); + int firstBlockOfPastCycle = getHeightOfFirstBlockOfPastCycle(chainHeight, numPastCycles); + if (firstBlockOfPastCycle == daoStateService.getGenesisBlockHeight()) { + return firstBlockOfPastCycle; + } + return firstBlockOfPastCycle + getOffsetFromFirstBlockInCycle(chainHeight); } public Integer getOffsetFromFirstBlockInCycle(int chainHeight) { @@ -87,12 +91,9 @@ public class CyclesInDaoStateService { public int getHeightOfFirstBlockOfPastCycle(int chainHeight, int numPastCycles) { return findCycleAtHeight(chainHeight) - .map(cycle -> { - int cycleIndex = getIndexForCycle(cycle); - int targetIndex = Math.max(0, (cycleIndex - numPastCycles)); - return getCycleAtIndex(targetIndex); - }) - .map(Cycle::getHeightOfFirstBlock) + .map(cycle -> getIndexForCycle(cycle) - numPastCycles) + .filter(targetIndex -> targetIndex > 0) + .map(targetIndex -> getCycleAtIndex(targetIndex).getHeightOfFirstBlock()) .orElse(daoStateService.getGenesisBlockHeight()); } diff --git a/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java index 30a0ec4d40..2ea831197e 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java @@ -56,7 +56,7 @@ class BurnTargetService { // Default value for the estimated BTC trade fees per month as BSQ sat value (100 sat = 1 BSQ). // Default is roughly average of last 12 months at Nov 2022. // Can be changed with DAO parameter voting. - private static final long DEFAULT_ESTIMATED_BTC_TRADE_FEE_REVENUE_PER_CYCLE = DevEnv.isDevTesting() ? 100000 : 6200000; + private static final long DEFAULT_ESTIMATED_BTC_TRADE_FEE_REVENUE_PER_CYCLE = DevEnv.isDevTesting() ? 1000000 : 6200000; private final DaoStateService daoStateService; private final CyclesInDaoStateService cyclesInDaoStateService; @@ -90,7 +90,8 @@ class BurnTargetService { issuanceAmount, issuanceHeight, issuanceDate, - cycleIndex)); + cycleIndex, + reimbursementProposal.getTxId())); })); return reimbursements; } @@ -231,4 +232,22 @@ class BurnTargetService { .mapToLong(e -> e) .sum(); } + + long getAccumulatedDecayedBurnedAmount(Collection burningManCandidates, int chainHeight) { + int fromBlock = cyclesInDaoStateService.getChainHeightOfPastCycle(chainHeight, NUM_CYCLES_BURN_TARGET); + return getAccumulatedDecayedBurnedAmount(burningManCandidates, chainHeight, fromBlock); + } + + private long getAccumulatedDecayedBurnedAmount(Collection burningManCandidates, + int chainHeight, + int fromBlock) { + return burningManCandidates.stream() + .map(burningManCandidate -> burningManCandidate.getBurnOutputModels().stream() + .filter(burnOutputModel -> burnOutputModel.getHeight() > fromBlock) + .filter(burnOutputModel -> burnOutputModel.getHeight() <= chainHeight) + .mapToLong(BurnOutputModel::getDecayedAmount) + .sum()) + .mapToLong(e -> e) + .sum(); + } } diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java index ac58a8f4f2..9f6c69439b 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java @@ -26,10 +26,13 @@ import bisq.core.dao.state.model.governance.CompensationProposal; import bisq.core.dao.state.model.governance.Proposal; import bisq.common.app.DevEnv; +import bisq.common.util.Tuple2; import javax.inject.Inject; import javax.inject.Singleton; +import com.google.common.annotations.VisibleForTesting; + import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -58,6 +61,7 @@ public class BurningManPresentationService implements DaoStateListener { private final Set reimbursements = new HashSet<>(); private Optional averageDistributionPerCycle = Optional.empty(); private Set myCompensationRequestNames = null; + @SuppressWarnings("OptionalAssignedToNull") private Optional> myGenesisOutputNames = null; @Inject @@ -108,6 +112,10 @@ public class BurningManPresentationService implements DaoStateListener { return burnTarget.get(); } + public long getBoostedBurnTarget() { + return getBurnTarget() + BURN_TARGET_BOOST_AMOUNT; + } + public long getAverageDistributionPerCycle() { if (averageDistributionPerCycle.isPresent()) { return averageDistributionPerCycle.get(); @@ -121,19 +129,49 @@ public class BurningManPresentationService implements DaoStateListener { return Math.round(burningManCandidate.getCappedBurnAmountShare() * getAverageDistributionPerCycle()); } - public long getAllowedBurnAmount(BurningManCandidate burningManCandidate) { - double maxBurnAmount = getBurnTarget() + BURN_TARGET_BOOST_AMOUNT; + public Tuple2 getCandidateBurnTarget(BurningManCandidate burningManCandidate) { + long burnTarget = getBurnTarget(); + long boostedBurnAmount = burnTarget + BURN_TARGET_BOOST_AMOUNT; double issuanceShare = burningManCandidate.getCompensationShare(); double boostedIssuanceShare = burningManCandidate.getBoostedCompensationShare(); - double effectiveBurnOutputShare = burningManCandidate.getCappedBurnAmountShare(); - if (issuanceShare > 0 && maxBurnAmount > 0 && effectiveBurnOutputShare < boostedIssuanceShare) { - // We reduce it with what he had already burned - long value = Math.round(boostedIssuanceShare * maxBurnAmount); - // If below dust we set value to 0 - return value < 546 ? 0 : value; - } else { - return 0; + long totalBurnedAmount = burnTargetService.getAccumulatedDecayedBurnedAmount(getBurningManCandidatesByName().values(), currentChainHeight); + + long lowerBaseTarget = Math.round(burnTarget * issuanceShare); + long upperBaseTarget = Math.round(boostedBurnAmount * boostedIssuanceShare); + if (totalBurnedAmount == 0) { + return new Tuple2<>(lowerBaseTarget, upperBaseTarget); } + + double cappedBurnAmountShare = burningManCandidate.getCappedBurnAmountShare(); + long candidatesBurnAmount = burningManCandidate.getAccumulatedDecayedBurnAmount(); + + if (issuanceShare > 0 && boostedBurnAmount > 0 && cappedBurnAmountShare < boostedIssuanceShare) { + long myBurnAmount = getMissingAmountToReachTargetShare(totalBurnedAmount, candidatesBurnAmount, issuanceShare); + long myMaxBurnAmount = getMissingAmountToReachTargetShare(totalBurnedAmount, candidatesBurnAmount, boostedIssuanceShare); + + // We limit to max burn amount + myBurnAmount = Math.min(myBurnAmount, lowerBaseTarget); + myMaxBurnAmount = Math.min(myMaxBurnAmount, upperBaseTarget); + + // If below dust we set value to 0 + myBurnAmount = myBurnAmount < 546 ? 0 : myBurnAmount; + myMaxBurnAmount = myMaxBurnAmount < 546 ? 0 : myMaxBurnAmount; + if (myBurnAmount < myMaxBurnAmount) { + return new Tuple2<>(myMaxBurnAmount, myBurnAmount); + } else { + return new Tuple2<>(myBurnAmount, myMaxBurnAmount); + } + } else { + return new Tuple2<>(0L, 0L); + } + } + + @VisibleForTesting + static long getMissingAmountToReachTargetShare(long total, long myAmount, double myTargetShare) { + long others = total - myAmount; + double shareTargetOthers = 1 - myTargetShare; + double targetAmount = shareTargetOthers > 0 ? myTargetShare / shareTargetOthers * others : 0; + return Math.round(targetAmount) - myAmount; } public Set getReimbursements() { diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index d0612519e6..8a12e617fe 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -79,7 +79,7 @@ class BurningManService { // and compensates for those who do not burn. The burn share is capped by that factor as well. // E.g. a contributor with 10% issuance share will be able to receive max 20% of the BTC fees or DPT output // even if they would have burned more and had a higher burn share than 20%. - static final double ISSUANCE_BOOST_FACTOR = 3; + static final double ISSUANCE_BOOST_FACTOR = 2; private final DaoStateService daoStateService; @@ -256,6 +256,10 @@ class BurningManService { if (issuanceHeight < 0) throw new IllegalArgumentException("issuanceHeight must not be negative. issuanceHeight=" + issuanceHeight); + if (currentBlockHeight <= firstBlockHeight) { + return amount; + } + double factor = Math.max(0, (issuanceHeight - firstBlockHeight) / (double) (currentBlockHeight - firstBlockHeight)); double factorWithOffset = firstBlockOffset + factor * (1 - firstBlockOffset); long weighted = Math.round(amount * factorWithOffset); diff --git a/core/src/main/java/bisq/core/dao/burningman/ReimbursementModel.java b/core/src/main/java/bisq/core/dao/burningman/ReimbursementModel.java index ddb2da3257..e4a2b9d9c2 100644 --- a/core/src/main/java/bisq/core/dao/burningman/ReimbursementModel.java +++ b/core/src/main/java/bisq/core/dao/burningman/ReimbursementModel.java @@ -29,15 +29,18 @@ public final class ReimbursementModel { private final int height; private final long date; private final int cycleIndex; + private final String txId; ReimbursementModel(long amount, int height, long date, - int cycleIndex) { + int cycleIndex, + String txId) { this.amount = amount; this.height = height; this.date = date; this.cycleIndex = cycleIndex; + this.txId = txId; } @Override @@ -47,6 +50,7 @@ public final class ReimbursementModel { ",\r\n height=" + height + ",\r\n date=" + new Date(date) + ",\r\n cycleIndex=" + cycleIndex + + ",\r\n txId=" + txId + "\r\n }"; } } diff --git a/core/src/main/java/bisq/core/util/coin/BsqFormatter.java b/core/src/main/java/bisq/core/util/coin/BsqFormatter.java index cd0accdb97..4909b5bd02 100644 --- a/core/src/main/java/bisq/core/util/coin/BsqFormatter.java +++ b/core/src/main/java/bisq/core/util/coin/BsqFormatter.java @@ -221,6 +221,10 @@ public class BsqFormatter implements CoinFormatter { } } + public String formatCoin(long value) { + return formatCoin(Coin.valueOf(value), false); + } + public String formatCoin(Coin coin) { return formatCoin(coin, false); } diff --git a/core/src/main/resources/i18n/displayStrings.properties b/core/src/main/resources/i18n/displayStrings.properties index c7bac13b8a..c5f1015edb 100644 --- a/core/src/main/resources/i18n/displayStrings.properties +++ b/core/src/main/resources/i18n/displayStrings.properties @@ -2281,13 +2281,14 @@ dao.burnBsq.assets.toFewDays=The asset fee is too low. The min. amount of days f dao.burningmen.target.header=Burn target dao.burningmen.burn.header=Burn BSQ dao.burningmen.amount.prompt=Amount to burn -dao.burningmen.amount.prompt.max=Amount to burn (max.: {0}) +dao.burningmen.amount.prompt.max=Amount to burn: {0} - {1} BSQ dao.burningmen.candidates.table.header=Burningmen candidates dao.burningmen.burnOutput.table.header=Burn outputs dao.burningmen.compensations.table.header=Compensations dao.burningmen.reimbursement.table.header=Reimbursement requests dao.burningmen.expectedRevenue=Past 3-month average distribution -dao.burningmen.burnTarget=Amount of BSQ to burn for off-setting reimbursements and BTC trade fees +dao.burningmen.burnTarget.label=Amount of BSQ to burn +dao.burningmen.burnTarget.fromTo={0} - {1} BSQ dao.burningmen.filter=Filter burningman candidates dao.burningmen.toggle=Show only active burningmen dao.burningmen.contributorsComboBox.prompt=Select any of my contributors @@ -2295,11 +2296,12 @@ dao.burningmen.selectedContributor=Selected contributor dao.burningmen.selectedContributorName=Contributor name dao.burningmen.selectedContributorAddress=Receiver address dao.burningmen.table.name=Contributor name -dao.burningmen.table.allowedBurnAmount=Allowed to burn +dao.burningmen.table.burnTarget=Burn target dao.burningmen.table.expectedRevenue=Expected to receive dao.burningmen.table.burnAmount=Burned amount dao.burningmen.table.decayedBurnAmount=Decayed burned amount -dao.burningmen.table.effectiveBurnOutputShare=Receiver share +dao.burningmen.table.burnAmountShare.label=Receiver share +dao.burningmen.table.burnAmountShare.capped={0} (capped from {1}) dao.burningmen.table.numBurnOutputs=Num. Burns dao.burningmen.table.issuanceAmount=Issued amount dao.burningmen.table.decayedIssuanceAmount=Decayed issued amount diff --git a/core/src/test/java/bisq/core/dao/burningman/BurningManPresentationServiceTest.java b/core/src/test/java/bisq/core/dao/burningman/BurningManPresentationServiceTest.java new file mode 100644 index 0000000000..f1e445c945 --- /dev/null +++ b/core/src/test/java/bisq/core/dao/burningman/BurningManPresentationServiceTest.java @@ -0,0 +1,135 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman; + + +import org.mockito.junit.MockitoJUnitRunner; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.assertEquals; + +@RunWith(MockitoJUnitRunner.class) +public class BurningManPresentationServiceTest { + @Test + public void testGetRandomIndex() { + long total = 100; + long myAmount = 40; + double myTargetShare = 0.75; + // Initial state: + // Mine: 40 + // Others: 60 + // Total: 100 + // Current myShare: 0.4 + + // Target state: + // Mine: 40 + 140 = 180 + // Others: 60 + // Total: 240 + // Target myShare: 0.75 + + assertEquals(140, BurningManPresentationService.getMissingAmountToReachTargetShare(total, myAmount, myTargetShare)); + + total = 60; + myAmount = 0; + myTargetShare = 0.4; + // Initial state: + // Mine: 0 + // Others: 60 + // Total: 60 + // Current myShare: 0 + + // Target state: + // Mine: 0 + 40 = 40 + // Others: 60 + // Total: 100 + // Target myShare: 0.4 + + assertEquals(40, BurningManPresentationService.getMissingAmountToReachTargetShare(total, myAmount, myTargetShare)); + + total = 40; + myAmount = 40; + myTargetShare = 1; + // Initial state: + // Mine: 40 + // Others: 0 + // Total: 40 + // Current myShare: 1 + + // Target state: + // Mine: 40 -40 = 0 + // Others: 0 + // Total: 0 + // Target myShare: 1 + + assertEquals(-40, BurningManPresentationService.getMissingAmountToReachTargetShare(total, myAmount, myTargetShare)); + + total = 100; + myAmount = 99; + myTargetShare = 0; + // Initial state: + // Mine: 99 + // Others: 1 + // Total: 100 + // Current myShare: 0.99 + + // Target state: + // Mine: 99 - 99 = 0 + // Others: 1 + // Total: 100 + // Target myShare: 0 + + assertEquals(-99, BurningManPresentationService.getMissingAmountToReachTargetShare(total, myAmount, myTargetShare)); + + total = 100; + myAmount = 1; + myTargetShare = 0.5; + // Initial state: + // Mine: 1 + // Others: 99 + // Total: 100 + // Current myShare: 0.01 + + // Target state: + // Mine: 1 + 98 = 99 + // Others: 99 + // Total: 198 + // Target myShare: 0.5 + + assertEquals(98, BurningManPresentationService.getMissingAmountToReachTargetShare(total, myAmount, myTargetShare)); + + + total = 110; + myAmount = 0; + myTargetShare = 0.6; + // Initial state: + // Mine: 0 + // Others: 110 + // Total: 110 + // Current myShare: 0 + + // Target state: + // Mine: 165 + // Others: 110 + // Total: 275 + // Target myShare: 0.6 + + assertEquals(165, BurningManPresentationService.getMissingAmountToReachTargetShare(total, myAmount, myTargetShare)); + } +} diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java index d789a7cbe1..94873d62f8 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java @@ -23,6 +23,8 @@ import bisq.core.locale.Res; import bisq.core.util.FormattingUtils; import bisq.core.util.coin.BsqFormatter; +import bisq.common.util.Tuple2; + import lombok.EqualsAndHashCode; import lombok.Getter; @@ -30,13 +32,13 @@ import lombok.Getter; @EqualsAndHashCode class BurningmenListItem { private final BurningManCandidate burningManCandidate; - private final String name, address, cappedBurnOutputShareAsString, compensationShareAsString, - accumulatedDecayedBurnAmountAsBsq, allowedBurnAmountAsBsq, accumulatedBurnAmountAsBsq, + private final String name, address, burnAmountShareAsString, cappedBurnAmountShareAsString, compensationShareAsString, + accumulatedDecayedBurnAmountAsBsq, burnTargetAsBsq, maxBurnTargetAsBsq, accumulatedBurnAmountAsBsq, accumulatedDecayedCompensationAmountAsBsq, accumulatedCompensationAmountAsBsq, expectedRevenueAsBsq; - private final long allowedBurnAmount, accumulatedDecayedBurnAmount, accumulatedBurnAmount, + private final long burnTarget, maxBurnTarget, accumulatedDecayedBurnAmount, accumulatedBurnAmount, accumulatedDecayedCompensationAmount, accumulatedCompensationAmount, expectedRevenue; private final int numBurnOutputs, numIssuances; - private final double cappedBurnOutputShare, compensationShare; + private final double cappedBurnAmountShare, burnAmountShare, compensationShare; BurningmenListItem(BurningManPresentationService burningManPresentationService, String name, @@ -48,14 +50,19 @@ class BurningmenListItem { address = burningManCandidate.getMostRecentAddress().orElse(Res.get("shared.na")); // Burn - allowedBurnAmount = burningManPresentationService.getAllowedBurnAmount(burningManCandidate); - allowedBurnAmountAsBsq = bsqFormatter.formatCoinWithCode(allowedBurnAmount); + Tuple2 burnTargetTuple = burningManPresentationService.getCandidateBurnTarget(burningManCandidate); + burnTarget = burnTargetTuple.first; + burnTargetAsBsq = bsqFormatter.formatCoin(burnTarget); + maxBurnTarget = burnTargetTuple.second; + maxBurnTargetAsBsq = bsqFormatter.formatCoin(maxBurnTarget); accumulatedBurnAmount = burningManCandidate.getAccumulatedBurnAmount(); accumulatedBurnAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedBurnAmount); accumulatedDecayedBurnAmount = burningManCandidate.getAccumulatedDecayedBurnAmount(); accumulatedDecayedBurnAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedDecayedBurnAmount); - cappedBurnOutputShare = burningManCandidate.getCappedBurnAmountShare(); - cappedBurnOutputShareAsString = FormattingUtils.formatToPercentWithSymbol(cappedBurnOutputShare); + burnAmountShare = burningManCandidate.getBurnAmountShare(); + burnAmountShareAsString = FormattingUtils.formatToPercentWithSymbol(burnAmountShare); + cappedBurnAmountShare = burningManCandidate.getCappedBurnAmountShare(); + cappedBurnAmountShareAsString = FormattingUtils.formatToPercentWithSymbol(cappedBurnAmountShare); expectedRevenue = burningManPresentationService.getExpectedRevenue(burningManCandidate); expectedRevenueAsBsq = bsqFormatter.formatCoinWithCode(expectedRevenue); numBurnOutputs = burningManCandidate.getBurnOutputModels().size(); diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java index d1e5e4f37f..7a957669af 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java @@ -96,7 +96,7 @@ public class BurningmenView extends ActivatableView implements private final BsqWalletService bsqWalletService; private final BsqFormatter bsqFormatter; private final CoinFormatter btcFormatter; - private final BsqValidator burnAmountValidator; + private final BsqValidator bsqValidator; private InputTextField amountInputTextField, burningmenFilterField; private ComboBox contributorComboBox; @@ -147,7 +147,7 @@ public class BurningmenView extends ActivatableView implements this.bsqWalletService = bsqWalletService; this.bsqFormatter = bsqFormatter; this.btcFormatter = btcFormatter; - this.burnAmountValidator = bsqValidator; + this.bsqValidator = bsqValidator; amountFocusOutListener = (observable, oldValue, newValue) -> { if (!newValue) { @@ -187,11 +187,12 @@ public class BurningmenView extends ActivatableView implements contributorsListener = (observable, oldValue, newValue) -> { if (newValue != null) { - bsqValidator.setMaxValue(Coin.valueOf(newValue.getAllowedBurnAmount())); + bsqValidator.setMaxValue(Coin.valueOf(newValue.getMaxBurnTarget())); amountInputTextField.clear(); amountInputTextField.resetValidation(); - amountInputTextField.setPromptText(Res.get("dao.burningmen.amount.prompt.max", - bsqFormatter.formatCoinWithCode(newValue.getAllowedBurnAmount()))); + String burnTarget = bsqFormatter.formatCoin(newValue.getBurnTarget()); + String maxBurnTarget = bsqFormatter.formatCoin(newValue.getMaxBurnTarget()); + amountInputTextField.setPromptText(Res.get("dao.burningmen.amount.prompt.max", burnTarget, maxBurnTarget)); updateButtonState(); } }; @@ -222,7 +223,7 @@ public class BurningmenView extends ActivatableView implements TitledGroupBg targetTitledGroupBg = addTitledGroupBg(gridPane, gridRow, 2, Res.get("dao.burningmen.target.header")); GridPane.setColumnSpan(targetTitledGroupBg, 2); burnTargetField = addCompactTopLabelTextField(gridPane, ++gridRow, - Res.get("dao.burningmen.burnTarget"), "", Layout.FLOATING_LABEL_DISTANCE).second; + Res.get("dao.burningmen.burnTarget.label"), "", Layout.FLOATING_LABEL_DISTANCE).second; Tuple3 currentBlockHeightTuple = addCompactTopLabelTextField(gridPane, gridRow, Res.get("dao.burningmen.expectedRevenue"), "", Layout.FLOATING_LABEL_DISTANCE); expectedRevenueField = currentBlockHeightTuple.second; @@ -369,7 +370,7 @@ public class BurningmenView extends ActivatableView implements showOnlyActiveBurningmenToggle.setOnAction(e -> updateBurningmenPredicate()); - amountInputTextField.setValidator(burnAmountValidator); + amountInputTextField.setValidator(bsqValidator); if (daoFacade.isParseBlockChainComplete()) { updateData(); @@ -430,7 +431,7 @@ public class BurningmenView extends ActivatableView implements } private void onUpdateAvailableBalance(Coin availableBalance) { - burnAmountValidator.setAvailableBalance(availableBalance); + bsqValidator.setAvailableBalance(availableBalance); updateButtonState(); } @@ -448,7 +449,10 @@ public class BurningmenView extends ActivatableView implements .collect(Collectors.toList())); expectedRevenueField.setText(bsqFormatter.formatCoinWithCode(burningManPresentationService.getAverageDistributionPerCycle())); - burnTargetField.setText(bsqFormatter.formatCoinWithCode(burningManPresentationService.getBurnTarget())); + + String burnTarget = bsqFormatter.formatCoin(burningManPresentationService.getBurnTarget()); + String boostedBurnTarget = bsqFormatter.formatCoin(burningManPresentationService.getBoostedBurnTarget()); + burnTargetField.setText(Res.get("dao.burningmen.burnTarget.fromTo", burnTarget, boostedBurnTarget)); if (daoFacade.isParseBlockChainComplete()) { Set myContributorNames = burningManPresentationService.getMyCompensationRequestNames(); @@ -469,7 +473,7 @@ public class BurningmenView extends ActivatableView implements burningmenFilteredList.setPredicate(burningmenListItem -> { boolean showOnlyActiveBurningmen = showOnlyActiveBurningmenToggle.isSelected(); String filterText = burningmenFilterField.getText(); - boolean activeBurnerOrShowAll = !showOnlyActiveBurningmen || burningmenListItem.getCappedBurnOutputShare() > 0; + boolean activeBurnerOrShowAll = !showOnlyActiveBurningmen || burningmenListItem.getCappedBurnAmountShare() > 0; if (filterText == null || filterText.trim().isEmpty()) { return activeBurnerOrShowAll; } else { @@ -492,7 +496,7 @@ public class BurningmenView extends ActivatableView implements } private void updateButtonState() { - boolean isValid = burnAmountValidator.validate(amountInputTextField.getText()).isValid && + boolean isValid = bsqValidator.validate(amountInputTextField.getText()).isValid && contributorComboBox.getSelectionModel().getSelectedItem() != null; burnButton.setDisable(!isValid); } @@ -547,8 +551,8 @@ public class BurningmenView extends ActivatableView implements burningmenTableView.getColumns().add(column); column.setComparator(Comparator.comparing(e -> e.getName().toLowerCase())); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.allowedBurnAmount")); - column.setMinWidth(110); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.burnTarget")); + column.setMinWidth(200); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @@ -560,7 +564,9 @@ public class BurningmenView extends ActivatableView implements public void updateItem(final BurningmenListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { - setText(item.getAllowedBurnAmountAsBsq()); + setText(Res.get("dao.burningmen.burnTarget.fromTo", + item.getBurnTargetAsBsq(), + item.getMaxBurnTargetAsBsq())); } else setText(""); } @@ -568,7 +574,7 @@ public class BurningmenView extends ActivatableView implements } }); burningmenTableView.getColumns().add(column); - column.setComparator(Comparator.comparing(BurningmenListItem::getAllowedBurnAmount)); + column.setComparator(Comparator.comparing(BurningmenListItem::getBurnTarget)); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.expectedRevenue")); column.setMinWidth(140); @@ -594,8 +600,8 @@ public class BurningmenView extends ActivatableView implements column.setComparator(Comparator.comparing(BurningmenListItem::getExpectedRevenue)); column.setSortType(TableColumn.SortType.DESCENDING); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.effectiveBurnOutputShare")); - column.setMinWidth(110); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.burnAmountShare.label")); + column.setMinWidth(220); column.setMaxWidth(column.getMinWidth()); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); @@ -608,7 +614,13 @@ public class BurningmenView extends ActivatableView implements public void updateItem(final BurningmenListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { - setText(item.getCappedBurnOutputShareAsString()); + if (item.getBurnAmountShare() != item.getCappedBurnAmountShare()) { + setText(Res.get("dao.burningmen.table.burnAmountShare.capped", + item.getCappedBurnAmountShareAsString(), + item.getBurnAmountShareAsString())); + } else { + setText(item.getBurnAmountShareAsString()); + } } else setText(""); } @@ -617,7 +629,7 @@ public class BurningmenView extends ActivatableView implements }); burningmenTableView.getColumns().add(column); column.setSortType(TableColumn.SortType.DESCENDING); - column.setComparator(Comparator.comparing(BurningmenListItem::getCappedBurnOutputShare)); + column.setComparator(Comparator.comparing(BurningmenListItem::getCappedBurnAmountShare)); burningmenTableView.getSortOrder().add(column); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.decayedBurnAmount")); From c1b8871fda0b361d029af83c728dc6a955d7339c Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 10 Nov 2022 11:26:37 -0500 Subject: [PATCH 47/86] Fix burn target calculations Signed-off-by: HenrikJannsen --- .../dao/burningman/BurningManCandidate.java | 6 ++-- .../BurningManPresentationService.java | 34 +++++++++---------- .../dao/burningman/BurningManService.java | 6 ++++ 3 files changed, 25 insertions(+), 21 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java b/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java index 0cd854266e..1fd90602b5 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java @@ -38,7 +38,6 @@ public final class BurningManCandidate { private long accumulatedCompensationAmount; private long accumulatedDecayedCompensationAmount; private double compensationShare; // Share of accumulated decayed compensation amounts in relation to total issued amounts - private double boostedCompensationShare; private Optional mostRecentAddress = Optional.empty(); private final List burnOutputModels = new ArrayList<>(); @@ -82,10 +81,10 @@ public final class BurningManCandidate { public void calculateShares(double totalDecayedCompensationAmounts, double totalDecayedBurnAmounts) { compensationShare = totalDecayedCompensationAmounts > 0 ? accumulatedDecayedCompensationAmount / totalDecayedCompensationAmounts : 0; - boostedCompensationShare = compensationShare * BurningManService.ISSUANCE_BOOST_FACTOR; + double maxBoostedCompensationShare = Math.min(BurningManService.MAX_BURN_SHARE, compensationShare * BurningManService.ISSUANCE_BOOST_FACTOR); burnAmountShare = totalDecayedBurnAmounts > 0 ? accumulatedDecayedBurnAmount / totalDecayedBurnAmounts : 0; - cappedBurnAmountShare = Math.min(boostedCompensationShare, burnAmountShare); + cappedBurnAmountShare = Math.min(maxBoostedCompensationShare, burnAmountShare); } @Override @@ -95,7 +94,6 @@ public final class BurningManCandidate { ",\r\n accumulatedCompensationAmount=" + accumulatedCompensationAmount + ",\r\n accumulatedDecayedCompensationAmount=" + accumulatedDecayedCompensationAmount + ",\r\n compensationShare=" + compensationShare + - ",\r\n boostedCompensationShare=" + boostedCompensationShare + ",\r\n mostRecentAddress=" + mostRecentAddress + ",\r\n burnOutputModels=" + burnOutputModels + ",\r\n accumulatedBurnAmount=" + accumulatedBurnAmount + diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java index 9f6c69439b..8004db05a3 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java @@ -131,37 +131,37 @@ public class BurningManPresentationService implements DaoStateListener { public Tuple2 getCandidateBurnTarget(BurningManCandidate burningManCandidate) { long burnTarget = getBurnTarget(); - long boostedBurnAmount = burnTarget + BURN_TARGET_BOOST_AMOUNT; - double issuanceShare = burningManCandidate.getCompensationShare(); - double boostedIssuanceShare = burningManCandidate.getBoostedCompensationShare(); - long totalBurnedAmount = burnTargetService.getAccumulatedDecayedBurnedAmount(getBurningManCandidatesByName().values(), currentChainHeight); + double compensationShare = burningManCandidate.getCompensationShare(); + if (burnTarget == 0 || compensationShare == 0) { + return new Tuple2<>(0L, 0L); + } - long lowerBaseTarget = Math.round(burnTarget * issuanceShare); - long upperBaseTarget = Math.round(boostedBurnAmount * boostedIssuanceShare); + double maxCompensationShare = Math.min(BurningManService.MAX_BURN_SHARE, compensationShare); + long lowerBaseTarget = Math.round(burnTarget * maxCompensationShare); + long boostedBurnAmount = burnTarget + BURN_TARGET_BOOST_AMOUNT; + double maxBoostedCompensationShare = Math.min(BurningManService.MAX_BURN_SHARE, compensationShare * BurningManService.ISSUANCE_BOOST_FACTOR); + long upperBaseTarget = Math.round(boostedBurnAmount * maxBoostedCompensationShare); + long totalBurnedAmount = burnTargetService.getAccumulatedDecayedBurnedAmount(getBurningManCandidatesByName().values(), currentChainHeight); if (totalBurnedAmount == 0) { return new Tuple2<>(lowerBaseTarget, upperBaseTarget); } - double cappedBurnAmountShare = burningManCandidate.getCappedBurnAmountShare(); + double burnAmountShare = burningManCandidate.getBurnAmountShare(); long candidatesBurnAmount = burningManCandidate.getAccumulatedDecayedBurnAmount(); + if (burnAmountShare < maxBoostedCompensationShare) { + long myBurnAmount = getMissingAmountToReachTargetShare(totalBurnedAmount, candidatesBurnAmount, maxCompensationShare); + long myMaxBurnAmount = getMissingAmountToReachTargetShare(totalBurnedAmount, candidatesBurnAmount, maxBoostedCompensationShare); - if (issuanceShare > 0 && boostedBurnAmount > 0 && cappedBurnAmountShare < boostedIssuanceShare) { - long myBurnAmount = getMissingAmountToReachTargetShare(totalBurnedAmount, candidatesBurnAmount, issuanceShare); - long myMaxBurnAmount = getMissingAmountToReachTargetShare(totalBurnedAmount, candidatesBurnAmount, boostedIssuanceShare); - - // We limit to max burn amount + // We limit to base targets myBurnAmount = Math.min(myBurnAmount, lowerBaseTarget); myMaxBurnAmount = Math.min(myMaxBurnAmount, upperBaseTarget); // If below dust we set value to 0 myBurnAmount = myBurnAmount < 546 ? 0 : myBurnAmount; myMaxBurnAmount = myMaxBurnAmount < 546 ? 0 : myMaxBurnAmount; - if (myBurnAmount < myMaxBurnAmount) { - return new Tuple2<>(myMaxBurnAmount, myBurnAmount); - } else { - return new Tuple2<>(myBurnAmount, myMaxBurnAmount); - } + return new Tuple2<>(myBurnAmount, myMaxBurnAmount); } else { + // We have reached out cap so no reason to burn more. return new Tuple2<>(0L, 0L); } } diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index 8a12e617fe..4acec01113 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -81,6 +81,12 @@ class BurningManService { // even if they would have burned more and had a higher burn share than 20%. static final double ISSUANCE_BOOST_FACTOR = 2; + // The max amount the burn share can reach. This value is derived from the min. security deposit in a trade and + // ensures that an attack where a BM would take all sell offers cannot be economically profitable as they would + // lose their deposit and cannot gain more than 11% of the DPT payout. As the total amount in a trade is 2 times + // that deposit plus the trade amount the limiting factor here is 11% (0.15 / 1.3). + static final double MAX_BURN_SHARE = 0.11; + private final DaoStateService daoStateService; private final CyclesInDaoStateService cyclesInDaoStateService; From b7a5b569ca69bcfce790fc846f0f161dea5efa5f Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 10 Nov 2022 11:47:16 -0500 Subject: [PATCH 48/86] Add legacy burningman to btc fee distribution in case we do not reach 100% from capped burn shares. Signed-off-by: HenrikJannsen --- .../dao/burningman/BtcFeeReceiverService.java | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java index 29fed0dd68..74e81f4584 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java @@ -32,6 +32,9 @@ import java.util.Map; import java.util.Random; import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; + +@Slf4j @Singleton public class BtcFeeReceiverService implements DaoStateListener { private final BurningManService burningManService; @@ -72,22 +75,27 @@ public class BtcFeeReceiverService implements DaoStateListener { return burningManService.getLegacyBurningManAddress(currentChainHeight); } - // It might be that we do not reach 100% if some entries had a capped effectiveBurnOutputShare. - // We ignore that here as there is no risk for abuse. Each entry in the group would have a higher chance in - // that case. - // effectiveBurnOutputShare is a % value represented as double. Smallest supported value is 0.01% -> 0.0001. + // It might be that we do not reach 100% if some entries had a cappedBurnAmountShare. + // In that case we fill up the gap to 100% with the legacy BM. + // cappedBurnAmountShare is a % value represented as double. Smallest supported value is 0.01% -> 0.0001. // By multiplying it with 10000 and using Math.floor we limit the candidate to 0.01%. - // Entries with 0 will be ignored in the selection method. + // Entries with 0 will be ignored in the selection method, so we do not need to filter them out. List burningManCandidates = new ArrayList<>(burningManCandidatesByName.values()); + int ceiling = 10000; List amountList = burningManCandidates.stream() .map(BurningManCandidate::getCappedBurnAmountShare) - .map(effectiveBurnOutputShare -> (long) Math.floor(effectiveBurnOutputShare * 10000)) + .map(cappedBurnAmountShare -> (long) Math.floor(cappedBurnAmountShare * ceiling)) .collect(Collectors.toList()); - if (amountList.isEmpty()) { - return burningManService.getLegacyBurningManAddress(currentChainHeight); + long sum = amountList.stream().mapToLong(e -> e).sum(); + // If we have not reached the 100% we fill the missing gap with the legacy BM + if (sum < ceiling) { + amountList.add(ceiling - sum); } + int winnerIndex = getRandomIndex(amountList, new Random()); - if (winnerIndex == -1) { + if (winnerIndex == burningManCandidates.size()) { + // If we have filled up the missing gap to 100% with the legacy BM we would get an index out of bounds of + // the burningManCandidates as we added for the legacy BM an entry at the end. return burningManService.getLegacyBurningManAddress(currentChainHeight); } return burningManCandidates.get(winnerIndex).getMostRecentAddress() From 2b4b6fe715dcd6822437fbaf884a4576aeb9d432 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 10 Nov 2022 13:37:37 -0500 Subject: [PATCH 49/86] Add logs for delayedPayoutTx receiver data Signed-off-by: HenrikJannsen --- .../java/bisq/core/support/dispute/refund/RefundManager.java | 4 +++- .../tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java | 5 +++-- .../bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java | 5 +++-- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java b/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java index fdb9748f82..06fdc0bdfb 100644 --- a/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java +++ b/core/src/main/java/bisq/core/support/dispute/refund/RefundManager.java @@ -319,10 +319,12 @@ public final class RefundManager extends DisputeManager { public void verifyDelayedPayoutTxReceivers(Transaction delayedPayoutTx, Dispute dispute) { Transaction depositTx = dispute.findDepositTx(btcWalletService).orElseThrow(); long inputAmount = depositTx.getOutput(0).getValue().value; + int selectionHeight = dispute.getBurningManSelectionHeight(); List> delayedPayoutTxReceivers = delayedPayoutTxReceiverService.getReceivers( - dispute.getBurningManSelectionHeight(), + selectionHeight, inputAmount, dispute.getTradeTxFee()); + log.info("Verify delayedPayoutTx using selectionHeight {} and receivers {}", selectionHeight, delayedPayoutTxReceivers); checkArgument(delayedPayoutTx.getOutputs().size() == delayedPayoutTxReceivers.size(), "Size of outputs and delayedPayoutTxReceivers must be the same"); diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java index f110fad2f2..00c16a57ed 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java @@ -63,11 +63,12 @@ public class BuyerVerifiesFinalDelayedPayoutTx extends TradeTask { if (DelayedPayoutTxReceiverService.isActivated()) { long inputAmount = depositTx.getOutput(0).getValue().value; long tradeTxFeeAsLong = trade.getTradeTxFeeAsLong(); + int selectionHeight = processModel.getBurningManSelectionHeight(); List> delayedPayoutTxReceivers = processModel.getDelayedPayoutTxReceiverService().getReceivers( - processModel.getBurningManSelectionHeight(), + selectionHeight, inputAmount, tradeTxFeeAsLong); - + log.info("Verify delayedPayoutTx using selectionHeight {} and receivers {}", selectionHeight, delayedPayoutTxReceivers); long lockTime = trade.getLockTime(); Transaction buyersDelayedPayoutTx = processModel.getTradeWalletService().createDelayedUnsignedPayoutTx( depositTx, diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java index 907946f9c7..28ce2ec378 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java @@ -54,11 +54,12 @@ public class SellerCreatesDelayedPayoutTx extends TradeTask { if (DelayedPayoutTxReceiverService.isActivated()) { long inputAmount = depositTx.getOutput(0).getValue().value; long tradeTxFeeAsLong = trade.getTradeTxFeeAsLong(); + int selectionHeight = processModel.getBurningManSelectionHeight(); List> delayedPayoutTxReceivers = processModel.getDelayedPayoutTxReceiverService().getReceivers( - processModel.getBurningManSelectionHeight(), + selectionHeight, inputAmount, tradeTxFeeAsLong); - + log.info("Verify delayedPayoutTx using selectionHeight {} and receivers {}", selectionHeight, delayedPayoutTxReceivers); long lockTime = trade.getLockTime(); preparedDelayedPayoutTx = tradeWalletService.createDelayedUnsignedPayoutTx( depositTx, From 883b0542a161b761cb2d194f08c77359ba44b1a5 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 10 Nov 2022 15:27:04 -0500 Subject: [PATCH 50/86] Fix getSnapshotHeight method For chainHeights < genesisHeight+3*grid we ended up with future chainHeights Signed-off-by: HenrikJannsen --- .../DelayedPayoutTxReceiverService.java | 11 ++++++- .../DelayedPayoutTxReceiverServiceTest.java | 32 ++++++++++++++----- 2 files changed, 34 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java index eee6b54614..af415eb35e 100644 --- a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java +++ b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java @@ -37,12 +37,15 @@ import java.util.GregorianCalendar; import java.util.List; import java.util.stream.Collectors; +import lombok.extern.slf4j.Slf4j; + /** * Used in the trade protocol for creating and verifying the delayed payout transaction. * Requires to be deterministic. * Changes in the parameters related to the receivers list could break verification of the peers * delayed payout transaction in case not both are using the same version. */ +@Slf4j @Singleton public class DelayedPayoutTxReceiverService implements DaoStateListener { private static final Date ACTIVATION_DATE = Utilities.getUTCDate(2023, GregorianCalendar.JANUARY, 1); @@ -167,6 +170,12 @@ public class DelayedPayoutTxReceiverService implements DaoStateListener { // Borrowed from DaoStateSnapshotService. We prefer to not reuse to avoid dependency to an unrelated domain. @VisibleForTesting static int getSnapshotHeight(int genesisHeight, int height, int grid) { - return Math.round(Math.max(genesisHeight + 3 * grid, height) / grid) * grid - grid; + int minSnapshotHeight = genesisHeight + 3 * grid; + if (height > minSnapshotHeight) { + int ratio = (int) Math.round(height / (double) grid); + return ratio * grid - grid; + } else { + return genesisHeight; + } } } diff --git a/core/src/test/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverServiceTest.java b/core/src/test/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverServiceTest.java index d7247da422..669d9c92b8 100644 --- a/core/src/test/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverServiceTest.java +++ b/core/src/test/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverServiceTest.java @@ -29,16 +29,32 @@ import static org.junit.Assert.assertEquals; public class DelayedPayoutTxReceiverServiceTest { @Test public void testGetSnapshotHeight() { - assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 0, 10)); - assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 100, 10)); - assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 102, 10)); - assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 119, 10)); - assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 120, 10)); - assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 121, 10)); - assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 130, 10)); - assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 139, 10)); + // up to genesis + 3* grid we use genesis + assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 0, 10)); + assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 100, 10)); + assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 102, 10)); + assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 119, 10)); + assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 120, 10)); + assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 121, 10)); + assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 130, 10)); + assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 131, 10)); + assertEquals(102, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 132, 10)); + + assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 133, 10)); + assertEquals(120, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 134, 10)); + + assertEquals(130, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 135, 10)); + assertEquals(130, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 136, 10)); + assertEquals(130, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 139, 10)); assertEquals(130, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 140, 10)); assertEquals(130, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 141, 10)); + + assertEquals(140, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 149, 10)); + assertEquals(140, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 150, 10)); + assertEquals(140, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 151, 10)); + + assertEquals(150, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 159, 10)); + assertEquals(990, DelayedPayoutTxReceiverService.getSnapshotHeight(102, 1000, 10)); } } From d4646cc19f4d30b4dd4ecb8491cece1c4f03a45e Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 10 Nov 2022 19:20:09 -0500 Subject: [PATCH 51/86] Add LegacyBurningMan to UI It is not included in BurningManCandidate candidate map as that would complicate things. We only want to show it in the UI for informational purposes. Signed-off-by: HenrikJannsen --- .../dao/burningman/BurningManCandidate.java | 8 +- .../BurningManPresentationService.java | 60 ++++++++++++ .../dao/burningman/BurningManService.java | 3 +- .../core/dao/burningman/LegacyBurningMan.java | 43 +++++++++ .../burningmen/BurningmenListItem.java | 91 +++++++++++++------ .../burnbsq/burningmen/BurningmenView.java | 20 ++-- 6 files changed, 179 insertions(+), 46 deletions(-) create mode 100644 core/src/main/java/bisq/core/dao/burningman/LegacyBurningMan.java diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java b/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java index 1fd90602b5..274bb4c740 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java @@ -33,18 +33,18 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @Getter @EqualsAndHashCode -public final class BurningManCandidate { +public class BurningManCandidate { private final List compensationModels = new ArrayList<>(); private long accumulatedCompensationAmount; private long accumulatedDecayedCompensationAmount; private double compensationShare; // Share of accumulated decayed compensation amounts in relation to total issued amounts - private Optional mostRecentAddress = Optional.empty(); + protected Optional mostRecentAddress = Optional.empty(); private final List burnOutputModels = new ArrayList<>(); private long accumulatedBurnAmount; private long accumulatedDecayedBurnAmount; - private double burnAmountShare; // Share of accumulated decayed burn amounts in relation to total burned amounts - private double cappedBurnAmountShare; // Capped burnAmountShare. Cannot be larger than boostedCompensationShare + protected double burnAmountShare; // Share of accumulated decayed burn amounts in relation to total burned amounts + protected double cappedBurnAmountShare; // Capped burnAmountShare. Cannot be larger than boostedCompensationShare BurningManCandidate() { } diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java index 8004db05a3..57bca46a5d 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java @@ -18,14 +18,21 @@ package bisq.core.dao.burningman; import bisq.core.btc.wallet.BsqWalletService; +import bisq.core.dao.CyclesInDaoStateService; import bisq.core.dao.governance.proposal.MyProposalListService; import bisq.core.dao.state.DaoStateListener; import bisq.core.dao.state.DaoStateService; +import bisq.core.dao.state.model.blockchain.BaseTx; import bisq.core.dao.state.model.blockchain.Block; +import bisq.core.dao.state.model.blockchain.Tx; +import bisq.core.dao.state.model.blockchain.TxOutput; import bisq.core.dao.state.model.governance.CompensationProposal; import bisq.core.dao.state.model.governance.Proposal; +import bisq.network.p2p.storage.P2PDataStorage; + import bisq.common.app.DevEnv; +import bisq.common.util.Hex; import bisq.common.util.Tuple2; import javax.inject.Inject; @@ -48,8 +55,10 @@ public class BurningManPresentationService implements DaoStateListener { // Burn target gets increased by that amount to give more flexibility. // Burn target is calculated from reimbursements + estimated BTC fees - burned amounts. static final long BURN_TARGET_BOOST_AMOUNT = DevEnv.isDevTesting() ? 1000000 : 10000000; + public static final String LEGACY_BURNING_MAN_NAME = "Legacy Burningman"; private final DaoStateService daoStateService; + private final CyclesInDaoStateService cyclesInDaoStateService; private final MyProposalListService myProposalListService; private final BsqWalletService bsqWalletService; private final BurningManService burningManService; @@ -63,14 +72,18 @@ public class BurningManPresentationService implements DaoStateListener { private Set myCompensationRequestNames = null; @SuppressWarnings("OptionalAssignedToNull") private Optional> myGenesisOutputNames = null; + private Optional legacyBurningMan = Optional.empty(); + private final Map> proofOfBurnOpReturnTxOutputByHash = new HashMap<>(); @Inject public BurningManPresentationService(DaoStateService daoStateService, + CyclesInDaoStateService cyclesInDaoStateService, MyProposalListService myProposalListService, BsqWalletService bsqWalletService, BurningManService burningManService, BurnTargetService burnTargetService) { this.daoStateService = daoStateService; + this.cyclesInDaoStateService = cyclesInDaoStateService; this.myProposalListService = myProposalListService; this.bsqWalletService = bsqWalletService; this.burningManService = burningManService; @@ -96,6 +109,8 @@ public class BurningManPresentationService implements DaoStateListener { burnTarget = Optional.empty(); myCompensationRequestNames = null; averageDistributionPerCycle = Optional.empty(); + legacyBurningMan = Optional.empty(); + proofOfBurnOpReturnTxOutputByHash.clear(); } @@ -223,4 +238,49 @@ public class BurningManPresentationService implements DaoStateListener { burningManCandidatesByName.putAll(burningManService.getBurningManCandidatesByName(currentChainHeight)); return burningManCandidatesByName; } + + public LegacyBurningMan getLegacyBurningMan() { + if (legacyBurningMan.isPresent()) { + return legacyBurningMan.get(); + } + + if (proofOfBurnOpReturnTxOutputByHash.isEmpty()) { + proofOfBurnOpReturnTxOutputByHash.putAll(burningManService.getProofOfBurnOpReturnTxOutputByHash(currentChainHeight)); + } + + // We do not add the legacy burningman to the list but keep it as class field only to avoid that it + // interferes with usage of the burningManCandidatesByName map. + LegacyBurningMan legacyBurningMan = new LegacyBurningMan(burningManService.getLegacyBurningManAddress(currentChainHeight)); + // Those are the hashes used by legacy BM for burning + Set hashes = Set.of("1701e47e5d8030f444c182b5e243871ebbaeadb5e82f", + "1701293c488822f98e70e047012f46f5f1647f37deb7", + "1701721206fe6b40777763de1c741f4fd2706d94775d"); + proofOfBurnOpReturnTxOutputByHash.values().stream() + .flatMap(txOutputs -> txOutputs.stream() + .filter(txOutput -> { + String hash = Hex.encode(txOutput.getOpReturnData()); + return hashes.stream().anyMatch(e -> e.equals(hash)); + })) + .forEach(burnOutput -> { + int burnOutputHeight = burnOutput.getBlockHeight(); + Optional optionalTx = daoStateService.getTx(burnOutput.getTxId()); + long burnOutputAmount = optionalTx.map(Tx::getBurntBsq).orElse(0L); + long date = optionalTx.map(BaseTx::getTime).orElse(0L); + int cycleIndex = cyclesInDaoStateService.getCycleIndexAtChainHeight(burnOutputHeight); + legacyBurningMan.addBurnOutputModel(new BurnOutputModel(burnOutputAmount, + burnOutputAmount, + burnOutputHeight, + burnOutput.getTxId(), + date, + cycleIndex)); + }); + // Set remaining share if the sum of all capped shares does not reach 100%. + double burnAmountShareOfOthers = getBurningManCandidatesByName().values().stream() + .mapToDouble(BurningManCandidate::getCappedBurnAmountShare) + .sum(); + legacyBurningMan.applyBurnAmountShare(1 - burnAmountShareOfOthers); + + this.legacyBurningMan = Optional.of(legacyBurningMan); + return legacyBurningMan; + } } diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index 4acec01113..65b412248d 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -178,7 +178,6 @@ class BurningManService { return burningManCandidatesByName; } - String getLegacyBurningManAddress(int chainHeight) { return daoStateService.getParamValue(Param.RECIPIENT_BTC_ADDRESS, chainHeight); } @@ -188,7 +187,7 @@ class BurningManService { // Private /////////////////////////////////////////////////////////////////////////////////////////// - private Map> getProofOfBurnOpReturnTxOutputByHash(int chainHeight) { + Map> getProofOfBurnOpReturnTxOutputByHash(int chainHeight) { Map> map = new HashMap<>(); daoStateService.getProofOfBurnOpReturnTxOutputs().stream() .filter(txOutput -> txOutput.getBlockHeight() <= chainHeight) diff --git a/core/src/main/java/bisq/core/dao/burningman/LegacyBurningMan.java b/core/src/main/java/bisq/core/dao/burningman/LegacyBurningMan.java new file mode 100644 index 0000000000..96a93a72e1 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/LegacyBurningMan.java @@ -0,0 +1,43 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman; + +import java.util.Optional; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Getter +@EqualsAndHashCode(callSuper = true) +public final class LegacyBurningMan extends BurningManCandidate { + LegacyBurningMan(String address) { + mostRecentAddress = Optional.of(address); + } + + void applyBurnAmountShare(double burnAmountShare) { + this.burnAmountShare = burnAmountShare; + this.cappedBurnAmountShare = burnAmountShare; + } + + @Override + public void calculateShares(double totalDecayedCompensationAmounts, double totalDecayedBurnAmounts) { + // do nothing + } +} diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java index 94873d62f8..6d94721233 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java @@ -19,6 +19,7 @@ package bisq.desktop.main.dao.burnbsq.burningmen; import bisq.core.dao.burningman.BurningManCandidate; import bisq.core.dao.burningman.BurningManPresentationService; +import bisq.core.dao.burningman.LegacyBurningMan; import bisq.core.locale.Res; import bisq.core.util.FormattingUtils; import bisq.core.util.coin.BsqFormatter; @@ -32,9 +33,9 @@ import lombok.Getter; @EqualsAndHashCode class BurningmenListItem { private final BurningManCandidate burningManCandidate; - private final String name, address, burnAmountShareAsString, cappedBurnAmountShareAsString, compensationShareAsString, - accumulatedDecayedBurnAmountAsBsq, burnTargetAsBsq, maxBurnTargetAsBsq, accumulatedBurnAmountAsBsq, - accumulatedDecayedCompensationAmountAsBsq, accumulatedCompensationAmountAsBsq, expectedRevenueAsBsq; + private final String name, address, cappedBurnAmountShareAsString, compensationShareAsString, + accumulatedDecayedBurnAmountAsBsq, burnTargetAsBsq, accumulatedBurnAmountAsBsq, + accumulatedDecayedCompensationAmountAsBsq, accumulatedCompensationAmountAsBsq, expectedRevenueAsBsq, numIssuancesAsString; private final long burnTarget, maxBurnTarget, accumulatedDecayedBurnAmount, accumulatedBurnAmount, accumulatedDecayedCompensationAmount, accumulatedCompensationAmount, expectedRevenue; private final int numBurnOutputs, numIssuances; @@ -49,31 +50,65 @@ class BurningmenListItem { this.name = name; address = burningManCandidate.getMostRecentAddress().orElse(Res.get("shared.na")); - // Burn - Tuple2 burnTargetTuple = burningManPresentationService.getCandidateBurnTarget(burningManCandidate); - burnTarget = burnTargetTuple.first; - burnTargetAsBsq = bsqFormatter.formatCoin(burnTarget); - maxBurnTarget = burnTargetTuple.second; - maxBurnTargetAsBsq = bsqFormatter.formatCoin(maxBurnTarget); - accumulatedBurnAmount = burningManCandidate.getAccumulatedBurnAmount(); - accumulatedBurnAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedBurnAmount); - accumulatedDecayedBurnAmount = burningManCandidate.getAccumulatedDecayedBurnAmount(); - accumulatedDecayedBurnAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedDecayedBurnAmount); - burnAmountShare = burningManCandidate.getBurnAmountShare(); - burnAmountShareAsString = FormattingUtils.formatToPercentWithSymbol(burnAmountShare); - cappedBurnAmountShare = burningManCandidate.getCappedBurnAmountShare(); - cappedBurnAmountShareAsString = FormattingUtils.formatToPercentWithSymbol(cappedBurnAmountShare); - expectedRevenue = burningManPresentationService.getExpectedRevenue(burningManCandidate); - expectedRevenueAsBsq = bsqFormatter.formatCoinWithCode(expectedRevenue); - numBurnOutputs = burningManCandidate.getBurnOutputModels().size(); + if (burningManCandidate instanceof LegacyBurningMan) { + // Burn + burnTarget = 0; + burnTargetAsBsq = ""; + maxBurnTarget = 0; + accumulatedBurnAmount = burningManCandidate.getAccumulatedBurnAmount(); + accumulatedBurnAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedBurnAmount); + accumulatedDecayedBurnAmount = 0; + accumulatedDecayedBurnAmountAsBsq = ""; - // Issuance - accumulatedCompensationAmount = burningManCandidate.getAccumulatedCompensationAmount(); - accumulatedCompensationAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedCompensationAmount); - accumulatedDecayedCompensationAmount = burningManCandidate.getAccumulatedDecayedCompensationAmount(); - accumulatedDecayedCompensationAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedDecayedCompensationAmount); - compensationShare = burningManCandidate.getCompensationShare(); - compensationShareAsString = FormattingUtils.formatToPercentWithSymbol(compensationShare); - numIssuances = burningManCandidate.getCompensationModels().size(); + burnAmountShare = burningManCandidate.getBurnAmountShare(); + cappedBurnAmountShareAsString = FormattingUtils.formatToPercentWithSymbol(burnAmountShare); + cappedBurnAmountShare = burningManCandidate.getCappedBurnAmountShare(); + + expectedRevenue = burningManPresentationService.getExpectedRevenue(burningManCandidate); + expectedRevenueAsBsq = bsqFormatter.formatCoinWithCode(expectedRevenue); + numBurnOutputs = burningManCandidate.getBurnOutputModels().size(); + + // There is no issuance for legacy BM + accumulatedCompensationAmount = 0; + accumulatedCompensationAmountAsBsq = ""; + accumulatedDecayedCompensationAmount = 0; + accumulatedDecayedCompensationAmountAsBsq = ""; + compensationShare = 0; + compensationShareAsString = ""; + numIssuances = 0; + numIssuancesAsString = ""; + } else { + // Burn + Tuple2 burnTargetTuple = burningManPresentationService.getCandidateBurnTarget(burningManCandidate); + burnTarget = burnTargetTuple.first; + maxBurnTarget = burnTargetTuple.second; + burnTargetAsBsq = Res.get("dao.burningmen.burnTarget.fromTo", bsqFormatter.formatCoin(burnTarget), bsqFormatter.formatCoin(maxBurnTarget)); + accumulatedBurnAmount = burningManCandidate.getAccumulatedBurnAmount(); + accumulatedBurnAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedBurnAmount); + accumulatedDecayedBurnAmount = burningManCandidate.getAccumulatedDecayedBurnAmount(); + accumulatedDecayedBurnAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedDecayedBurnAmount); + burnAmountShare = burningManCandidate.getBurnAmountShare(); + cappedBurnAmountShare = burningManCandidate.getCappedBurnAmountShare(); + if (burnAmountShare != cappedBurnAmountShare) { + cappedBurnAmountShareAsString = Res.get("dao.burningmen.table.burnAmountShare.capped", + FormattingUtils.formatToPercentWithSymbol(cappedBurnAmountShare), + FormattingUtils.formatToPercentWithSymbol(burnAmountShare)); + } else { + cappedBurnAmountShareAsString = FormattingUtils.formatToPercentWithSymbol(cappedBurnAmountShare); + } + expectedRevenue = burningManPresentationService.getExpectedRevenue(burningManCandidate); + expectedRevenueAsBsq = bsqFormatter.formatCoinWithCode(expectedRevenue); + numBurnOutputs = burningManCandidate.getBurnOutputModels().size(); + + // Issuance + accumulatedCompensationAmount = burningManCandidate.getAccumulatedCompensationAmount(); + accumulatedCompensationAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedCompensationAmount); + accumulatedDecayedCompensationAmount = burningManCandidate.getAccumulatedDecayedCompensationAmount(); + accumulatedDecayedCompensationAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedDecayedCompensationAmount); + compensationShare = burningManCandidate.getCompensationShare(); + compensationShareAsString = FormattingUtils.formatToPercentWithSymbol(compensationShare); + numIssuances = burningManCandidate.getCompensationModels().size(); + numIssuancesAsString = String.valueOf(numIssuances); + } } } diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java index 7a957669af..2067b26302 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java @@ -444,6 +444,10 @@ public class BurningmenView extends ActivatableView implements burningmenObservableList.setAll(burningManPresentationService.getBurningManCandidatesByName().entrySet().stream() .map(entry -> new BurningmenListItem(burningManPresentationService, entry.getKey(), entry.getValue(), bsqFormatter)) .collect(Collectors.toList())); + burningmenObservableList.add(new BurningmenListItem(burningManPresentationService, + BurningManPresentationService.LEGACY_BURNING_MAN_NAME, + burningManPresentationService.getLegacyBurningMan(), + bsqFormatter)); reimbursementObservableList.setAll(burningManPresentationService.getReimbursements().stream() .map(reimbursementModel -> new ReimbursementListItem(reimbursementModel, bsqFormatter)) .collect(Collectors.toList())); @@ -564,9 +568,7 @@ public class BurningmenView extends ActivatableView implements public void updateItem(final BurningmenListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { - setText(Res.get("dao.burningmen.burnTarget.fromTo", - item.getBurnTargetAsBsq(), - item.getMaxBurnTargetAsBsq())); + setText(item.getBurnTargetAsBsq()); } else setText(""); } @@ -614,13 +616,7 @@ public class BurningmenView extends ActivatableView implements public void updateItem(final BurningmenListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { - if (item.getBurnAmountShare() != item.getCappedBurnAmountShare()) { - setText(Res.get("dao.burningmen.table.burnAmountShare.capped", - item.getCappedBurnAmountShareAsString(), - item.getBurnAmountShareAsString())); - } else { - setText(item.getBurnAmountShareAsString()); - } + setText(item.getCappedBurnAmountShareAsString()); } else setText(""); } @@ -657,7 +653,7 @@ public class BurningmenView extends ActivatableView implements column.setSortType(TableColumn.SortType.DESCENDING); column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.burnAmount")); - column.setMinWidth(110); + column.setMinWidth(130); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @@ -791,7 +787,7 @@ public class BurningmenView extends ActivatableView implements public void updateItem(final BurningmenListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { - setText(String.valueOf(item.getNumIssuances())); + setText(item.getNumIssuancesAsString()); } else setText(""); } From 7f2b62f391b479c7fca66f6de0b0bf592b299d06 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 10 Nov 2022 19:30:39 -0500 Subject: [PATCH 52/86] Don't show decayedAmount for LegacyBurningMan Signed-off-by: HenrikJannsen --- .../dao/burnbsq/burningmen/BurnOutputListItem.java | 7 +++---- .../main/dao/burnbsq/burningmen/BurningmenView.java | 10 +++++++--- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java index 04377bc2b6..936cde760c 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java @@ -34,15 +34,14 @@ class BurnOutputListItem { private final long date, amount, decayedAmount; private final int cycleIndex, height; - BurnOutputListItem(BurnOutputModel model, BsqFormatter bsqFormatter) { - + BurnOutputListItem(BurnOutputModel model, BsqFormatter bsqFormatter, boolean isLegacyBurningMan) { height = model.getHeight(); cycleIndex = model.getCycleIndex(); date = model.getDate(); dateAsString = DisplayUtils.formatDateTime(new Date(date)); amount = model.getAmount(); amountAsString = bsqFormatter.formatCoinWithCode(amount); - decayedAmount = model.getDecayedAmount(); - decayedAmountAsString = bsqFormatter.formatCoinWithCode(decayedAmount); + decayedAmount = isLegacyBurningMan ? 0 : model.getDecayedAmount(); + decayedAmountAsString = isLegacyBurningMan ? "" : bsqFormatter.formatCoinWithCode(decayedAmount); } } diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java index 2067b26302..1f29204e23 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java @@ -32,7 +32,9 @@ import bisq.desktop.util.validation.BsqValidator; import bisq.core.btc.listeners.BsqBalanceListener; import bisq.core.btc.wallet.BsqWalletService; import bisq.core.dao.DaoFacade; +import bisq.core.dao.burningman.BurningManCandidate; import bisq.core.dao.burningman.BurningManPresentationService; +import bisq.core.dao.burningman.LegacyBurningMan; import bisq.core.dao.governance.proofofburn.ProofOfBurnService; import bisq.core.dao.governance.proposal.TxException; import bisq.core.dao.state.DaoStateListener; @@ -489,11 +491,13 @@ public class BurningmenView extends ActivatableView implements private void onBurningManSelected(BurningmenListItem burningmenListItem) { selectedContributorNameField.setText(burningmenListItem.getName()); selectedContributorAddressField.setText(burningmenListItem.getAddress()); - burnOutputsObservableList.setAll(burningmenListItem.getBurningManCandidate().getBurnOutputModels().stream() - .map(burnOutputModel -> new BurnOutputListItem(burnOutputModel, bsqFormatter)) + BurningManCandidate burningManCandidate = burningmenListItem.getBurningManCandidate(); + boolean isLegacyBurningMan = burningManCandidate instanceof LegacyBurningMan; + burnOutputsObservableList.setAll(burningManCandidate.getBurnOutputModels().stream() + .map(burnOutputModel -> new BurnOutputListItem(burnOutputModel, bsqFormatter, isLegacyBurningMan)) .collect(Collectors.toList())); GUIUtil.setFitToRowsForTableView(burnOutputsTableView, 36, 28, 4, 6); - compensationObservableList.setAll(burningmenListItem.getBurningManCandidate().getCompensationModels().stream() + compensationObservableList.setAll(burningManCandidate.getCompensationModels().stream() .map(compensationModel -> new CompensationListItem(compensationModel, bsqFormatter)) .collect(Collectors.toList())); GUIUtil.setFitToRowsForTableView(compensationsTableView, 36, 28, 4, 6); From d31493b1e921eb3fcddab869055b662cf3b44384 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Sun, 13 Nov 2022 10:11:37 -0500 Subject: [PATCH 53/86] Use TradeWalletService.MIN_DELAYED_PAYOUT_TX_FEE as min value for miner fee in DelayedPayoutTxReceiverService.getSpendableAmount Signed-off-by: HenrikJannsen --- .../main/java/bisq/core/btc/wallet/TradeWalletService.java | 2 +- .../dao/burningman/DelayedPayoutTxReceiverService.java | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/bisq/core/btc/wallet/TradeWalletService.java b/core/src/main/java/bisq/core/btc/wallet/TradeWalletService.java index 48cfc7d117..29bda0b41e 100644 --- a/core/src/main/java/bisq/core/btc/wallet/TradeWalletService.java +++ b/core/src/main/java/bisq/core/btc/wallet/TradeWalletService.java @@ -76,7 +76,7 @@ import static com.google.common.base.Preconditions.checkNotNull; public class TradeWalletService { private static final Logger log = LoggerFactory.getLogger(TradeWalletService.class); - private static final Coin MIN_DELAYED_PAYOUT_TX_FEE = Coin.valueOf(1000); + public static final Coin MIN_DELAYED_PAYOUT_TX_FEE = Coin.valueOf(1000); private final WalletsSetup walletsSetup; private final Preferences preferences; diff --git a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java index af415eb35e..8da444c7bf 100644 --- a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java +++ b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java @@ -17,6 +17,7 @@ package bisq.core.dao.burningman; +import bisq.core.btc.wallet.TradeWalletService; import bisq.core.dao.state.DaoStateListener; import bisq.core.dao.state.DaoStateService; import bisq.core.dao.state.model.blockchain.Block; @@ -162,8 +163,10 @@ public class DelayedPayoutTxReceiverService implements DaoStateListener { private static long getSpendableAmount(int numOutputs, long inputAmount, long txFeePerVbyte) { // Output size: 32 bytes // Tx size without outputs: 51 bytes - int txSize = 51 + numOutputs * 32; - long minerFee = txFeePerVbyte * txSize; + int txSize = 51 + numOutputs * 32; // min value: txSize=83 + long minerFee = txFeePerVbyte * txSize; // min value: minerFee=830 + // We need to make sure we have at least 1000 sat as defined in TradeWalletService + minerFee = Math.max(TradeWalletService.MIN_DELAYED_PAYOUT_TX_FEE.value, minerFee); return inputAmount - minerFee; } From c1dc31778340b43240631273e704f77a2ae9b5b7 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 17 Nov 2022 18:47:04 -0500 Subject: [PATCH 54/86] Remove unused methods Signed-off-by: HenrikJannsen --- .../main/java/bisq/core/dao/DaoFacade.java | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/DaoFacade.java b/core/src/main/java/bisq/core/dao/DaoFacade.java index 1bd27ecab2..b4729179d2 100644 --- a/core/src/main/java/bisq/core/dao/DaoFacade.java +++ b/core/src/main/java/bisq/core/dao/DaoFacade.java @@ -53,7 +53,6 @@ import bisq.core.dao.governance.proposal.reimbursement.ReimbursementConsensus; import bisq.core.dao.governance.proposal.reimbursement.ReimbursementProposalFactory; import bisq.core.dao.governance.proposal.removeAsset.RemoveAssetProposalFactory; import bisq.core.dao.governance.proposal.role.RoleProposalFactory; -import bisq.core.dao.governance.proposal.storage.appendonly.ProposalPayload; import bisq.core.dao.monitoring.DaoStateMonitoringService; import bisq.core.dao.state.DaoStateListener; import bisq.core.dao.state.DaoStateService; @@ -66,10 +65,8 @@ import bisq.core.dao.state.model.blockchain.TxOutputKey; import bisq.core.dao.state.model.blockchain.TxType; import bisq.core.dao.state.model.governance.Ballot; import bisq.core.dao.state.model.governance.BondedRoleType; -import bisq.core.dao.state.model.governance.CompensationProposal; import bisq.core.dao.state.model.governance.Cycle; import bisq.core.dao.state.model.governance.DaoPhase; -import bisq.core.dao.state.model.governance.Issuance; import bisq.core.dao.state.model.governance.IssuanceType; import bisq.core.dao.state.model.governance.Proposal; import bisq.core.dao.state.model.governance.Role; @@ -649,24 +646,6 @@ public class DaoFacade implements DaoSetupService { return daoStateService.getIssuanceSetForType(issuanceType).size(); } - public Set getIssuanceSetForType(IssuanceType issuanceType) { - return daoStateService.getIssuanceSetForType(issuanceType); - } - - public Map> getAddressByOutputKeyMap() { - return daoStateService.getUnorderedTxOutputStream() - .collect(Collectors.toMap(BaseTxOutput::getKey, txOutput -> Optional.ofNullable(txOutput.getAddress()))); - } - - public Optional findCompensationProposal(String txId) { - return proposalService.getProposalPayloads().stream() - .map(ProposalPayload::getProposal) - .filter(proposal -> txId.equals(proposal.getTxId())) - .filter(proposal -> proposal instanceof CompensationProposal) - .map(proposal -> (CompensationProposal) proposal) - .findAny(); - } - public Set getBurntFeeTxs() { return daoStateService.getBurntFeeTxs(); } From dff6d4833366191e30eb8cac7dc79d6a6b0fb609 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 17 Nov 2022 18:47:33 -0500 Subject: [PATCH 55/86] Refactoring: Move BM model classes into model package. Adjust visibility. Signed-off-by: HenrikJannsen --- .../dao/burningman/BtcFeeReceiverService.java | 1 + .../dao/burningman/BurnTargetService.java | 3 ++ .../BurningManPresentationService.java | 4 +++ .../dao/burningman/BurningManService.java | 11 ++++--- .../DelayedPayoutTxReceiverService.java | 1 + .../{ => model}/BurnOutputModel.java | 14 ++++----- .../{ => model}/BurningManCandidate.java | 6 ++-- .../{ => model}/CompensationModel.java | 30 +++++++++---------- .../{ => model}/LegacyBurningMan.java | 6 ++-- .../{ => model}/ReimbursementModel.java | 12 ++++---- .../burningmen/BurnOutputListItem.java | 2 +- .../burningmen/BurningmenListItem.java | 4 +-- .../burnbsq/burningmen/BurningmenView.java | 4 +-- .../burningmen/CompensationListItem.java | 2 +- .../burningmen/ReimbursementListItem.java | 2 +- 15 files changed, 58 insertions(+), 44 deletions(-) rename core/src/main/java/bisq/core/dao/burningman/{ => model}/BurnOutputModel.java (85%) rename core/src/main/java/bisq/core/dao/burningman/{ => model}/BurningManCandidate.java (97%) rename core/src/main/java/bisq/core/dao/burningman/{ => model}/CompensationModel.java (74%) rename core/src/main/java/bisq/core/dao/burningman/{ => model}/LegacyBurningMan.java (89%) rename core/src/main/java/bisq/core/dao/burningman/{ => model}/ReimbursementModel.java (85%) diff --git a/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java index 74e81f4584..925a8063b6 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java @@ -17,6 +17,7 @@ package bisq.core.dao.burningman; +import bisq.core.dao.burningman.model.BurningManCandidate; import bisq.core.dao.state.DaoStateListener; import bisq.core.dao.state.DaoStateService; import bisq.core.dao.state.model.blockchain.Block; diff --git a/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java index 2ea831197e..ee5eda26b0 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java @@ -18,6 +18,9 @@ package bisq.core.dao.burningman; import bisq.core.dao.CyclesInDaoStateService; +import bisq.core.dao.burningman.model.BurnOutputModel; +import bisq.core.dao.burningman.model.BurningManCandidate; +import bisq.core.dao.burningman.model.ReimbursementModel; import bisq.core.dao.governance.param.Param; import bisq.core.dao.governance.proposal.ProposalService; import bisq.core.dao.governance.proposal.storage.appendonly.ProposalPayload; diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java index 57bca46a5d..ffd4d80011 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java @@ -19,6 +19,10 @@ package bisq.core.dao.burningman; import bisq.core.btc.wallet.BsqWalletService; import bisq.core.dao.CyclesInDaoStateService; +import bisq.core.dao.burningman.model.BurnOutputModel; +import bisq.core.dao.burningman.model.BurningManCandidate; +import bisq.core.dao.burningman.model.LegacyBurningMan; +import bisq.core.dao.burningman.model.ReimbursementModel; import bisq.core.dao.governance.proposal.MyProposalListService; import bisq.core.dao.state.DaoStateListener; import bisq.core.dao.state.DaoStateService; diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index 65b412248d..7f5c988d63 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -18,6 +18,9 @@ package bisq.core.dao.burningman; import bisq.core.dao.CyclesInDaoStateService; +import bisq.core.dao.burningman.model.BurnOutputModel; +import bisq.core.dao.burningman.model.BurningManCandidate; +import bisq.core.dao.burningman.model.CompensationModel; import bisq.core.dao.governance.param.Param; import bisq.core.dao.governance.proofofburn.ProofOfBurnConsensus; import bisq.core.dao.governance.proposal.ProposalService; @@ -57,13 +60,13 @@ import lombok.extern.slf4j.Slf4j; */ @Slf4j @Singleton -class BurningManService { +public class BurningManService { // Parameters // Cannot be changed after release as it would break trade protocol verification of DPT receivers. // Prefix for generic names for the genesis outputs. Appended with output index. // Used as pre-image for burning. - static final String GENESIS_OUTPUT_PREFIX = "Bisq co-founder "; + public static final String GENESIS_OUTPUT_PREFIX = "Bisq co-founder "; // Factor for weighting the genesis output amounts. private static final double GENESIS_OUTPUT_AMOUNT_FACTOR = 0.05; @@ -79,13 +82,13 @@ class BurningManService { // and compensates for those who do not burn. The burn share is capped by that factor as well. // E.g. a contributor with 10% issuance share will be able to receive max 20% of the BTC fees or DPT output // even if they would have burned more and had a higher burn share than 20%. - static final double ISSUANCE_BOOST_FACTOR = 2; + public static final double ISSUANCE_BOOST_FACTOR = 2; // The max amount the burn share can reach. This value is derived from the min. security deposit in a trade and // ensures that an attack where a BM would take all sell offers cannot be economically profitable as they would // lose their deposit and cannot gain more than 11% of the DPT payout. As the total amount in a trade is 2 times // that deposit plus the trade amount the limiting factor here is 11% (0.15 / 1.3). - static final double MAX_BURN_SHARE = 0.11; + public static final double MAX_BURN_SHARE = 0.11; private final DaoStateService daoStateService; diff --git a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java index 8da444c7bf..32cf2034ed 100644 --- a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java +++ b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java @@ -18,6 +18,7 @@ package bisq.core.dao.burningman; import bisq.core.btc.wallet.TradeWalletService; +import bisq.core.dao.burningman.model.BurningManCandidate; import bisq.core.dao.state.DaoStateListener; import bisq.core.dao.state.DaoStateService; import bisq.core.dao.state.model.blockchain.Block; diff --git a/core/src/main/java/bisq/core/dao/burningman/BurnOutputModel.java b/core/src/main/java/bisq/core/dao/burningman/model/BurnOutputModel.java similarity index 85% rename from core/src/main/java/bisq/core/dao/burningman/BurnOutputModel.java rename to core/src/main/java/bisq/core/dao/burningman/model/BurnOutputModel.java index a11d279cf8..4de2436dc0 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurnOutputModel.java +++ b/core/src/main/java/bisq/core/dao/burningman/model/BurnOutputModel.java @@ -15,7 +15,7 @@ * along with Bisq. If not, see . */ -package bisq.core.dao.burningman; +package bisq.core.dao.burningman.model; import java.util.Date; @@ -32,12 +32,12 @@ public final class BurnOutputModel { private final long date; private final int cycleIndex; - BurnOutputModel(long amount, - long decayedAmount, - int height, - String txId, - long date, - int cycleIndex) { + public BurnOutputModel(long amount, + long decayedAmount, + int height, + String txId, + long date, + int cycleIndex) { this.amount = amount; this.decayedAmount = decayedAmount; diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java b/core/src/main/java/bisq/core/dao/burningman/model/BurningManCandidate.java similarity index 97% rename from core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java rename to core/src/main/java/bisq/core/dao/burningman/model/BurningManCandidate.java index 274bb4c740..158d0b0435 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManCandidate.java +++ b/core/src/main/java/bisq/core/dao/burningman/model/BurningManCandidate.java @@ -15,7 +15,9 @@ * along with Bisq. If not, see . */ -package bisq.core.dao.burningman; +package bisq.core.dao.burningman.model; + +import bisq.core.dao.burningman.BurningManService; import java.util.ArrayList; import java.util.Comparator; @@ -46,7 +48,7 @@ public class BurningManCandidate { protected double burnAmountShare; // Share of accumulated decayed burn amounts in relation to total burned amounts protected double cappedBurnAmountShare; // Capped burnAmountShare. Cannot be larger than boostedCompensationShare - BurningManCandidate() { + public BurningManCandidate() { } public void addBurnOutputModel(BurnOutputModel burnOutputModel) { diff --git a/core/src/main/java/bisq/core/dao/burningman/CompensationModel.java b/core/src/main/java/bisq/core/dao/burningman/model/CompensationModel.java similarity index 74% rename from core/src/main/java/bisq/core/dao/burningman/CompensationModel.java rename to core/src/main/java/bisq/core/dao/burningman/model/CompensationModel.java index bd9a4354c1..7425446d9d 100644 --- a/core/src/main/java/bisq/core/dao/burningman/CompensationModel.java +++ b/core/src/main/java/bisq/core/dao/burningman/model/CompensationModel.java @@ -15,7 +15,7 @@ * along with Bisq. If not, see . */ -package bisq.core.dao.burningman; +package bisq.core.dao.burningman.model; import java.util.Date; import java.util.Optional; @@ -26,13 +26,13 @@ import lombok.Getter; @Getter @EqualsAndHashCode public final class CompensationModel { - static CompensationModel fromCompensationRequest(String address, - long amount, - long decayedAmount, - int height, - String txId, - long date, - int cycleIndex) { + public static CompensationModel fromCompensationRequest(String address, + long amount, + long decayedAmount, + int height, + String txId, + long date, + int cycleIndex) { return new CompensationModel(address, amount, decayedAmount, @@ -43,13 +43,13 @@ public final class CompensationModel { cycleIndex); } - static CompensationModel fromGenesisOutput(String address, - long amount, - long decayedAmount, - int height, - String txId, - int outputIndex, - long date) { + public static CompensationModel fromGenesisOutput(String address, + long amount, + long decayedAmount, + int height, + String txId, + int outputIndex, + long date) { return new CompensationModel(address, amount, decayedAmount, diff --git a/core/src/main/java/bisq/core/dao/burningman/LegacyBurningMan.java b/core/src/main/java/bisq/core/dao/burningman/model/LegacyBurningMan.java similarity index 89% rename from core/src/main/java/bisq/core/dao/burningman/LegacyBurningMan.java rename to core/src/main/java/bisq/core/dao/burningman/model/LegacyBurningMan.java index 96a93a72e1..a40715cdac 100644 --- a/core/src/main/java/bisq/core/dao/burningman/LegacyBurningMan.java +++ b/core/src/main/java/bisq/core/dao/burningman/model/LegacyBurningMan.java @@ -15,7 +15,7 @@ * along with Bisq. If not, see . */ -package bisq.core.dao.burningman; +package bisq.core.dao.burningman.model; import java.util.Optional; @@ -27,11 +27,11 @@ import lombok.extern.slf4j.Slf4j; @Getter @EqualsAndHashCode(callSuper = true) public final class LegacyBurningMan extends BurningManCandidate { - LegacyBurningMan(String address) { + public LegacyBurningMan(String address) { mostRecentAddress = Optional.of(address); } - void applyBurnAmountShare(double burnAmountShare) { + public void applyBurnAmountShare(double burnAmountShare) { this.burnAmountShare = burnAmountShare; this.cappedBurnAmountShare = burnAmountShare; } diff --git a/core/src/main/java/bisq/core/dao/burningman/ReimbursementModel.java b/core/src/main/java/bisq/core/dao/burningman/model/ReimbursementModel.java similarity index 85% rename from core/src/main/java/bisq/core/dao/burningman/ReimbursementModel.java rename to core/src/main/java/bisq/core/dao/burningman/model/ReimbursementModel.java index e4a2b9d9c2..acc5a07772 100644 --- a/core/src/main/java/bisq/core/dao/burningman/ReimbursementModel.java +++ b/core/src/main/java/bisq/core/dao/burningman/model/ReimbursementModel.java @@ -15,7 +15,7 @@ * along with Bisq. If not, see . */ -package bisq.core.dao.burningman; +package bisq.core.dao.burningman.model; import java.util.Date; @@ -31,11 +31,11 @@ public final class ReimbursementModel { private final int cycleIndex; private final String txId; - ReimbursementModel(long amount, - int height, - long date, - int cycleIndex, - String txId) { + public ReimbursementModel(long amount, + int height, + long date, + int cycleIndex, + String txId) { this.amount = amount; this.height = height; this.date = date; diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java index 936cde760c..e260a1d7ca 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java @@ -19,7 +19,7 @@ package bisq.desktop.main.dao.burnbsq.burningmen; import bisq.desktop.util.DisplayUtils; -import bisq.core.dao.burningman.BurnOutputModel; +import bisq.core.dao.burningman.model.BurnOutputModel; import bisq.core.util.coin.BsqFormatter; import java.util.Date; diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java index 6d94721233..11800837ae 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java @@ -17,9 +17,9 @@ package bisq.desktop.main.dao.burnbsq.burningmen; -import bisq.core.dao.burningman.BurningManCandidate; import bisq.core.dao.burningman.BurningManPresentationService; -import bisq.core.dao.burningman.LegacyBurningMan; +import bisq.core.dao.burningman.model.BurningManCandidate; +import bisq.core.dao.burningman.model.LegacyBurningMan; import bisq.core.locale.Res; import bisq.core.util.FormattingUtils; import bisq.core.util.coin.BsqFormatter; diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java index 1f29204e23..23debed3bd 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java @@ -32,9 +32,9 @@ import bisq.desktop.util.validation.BsqValidator; import bisq.core.btc.listeners.BsqBalanceListener; import bisq.core.btc.wallet.BsqWalletService; import bisq.core.dao.DaoFacade; -import bisq.core.dao.burningman.BurningManCandidate; import bisq.core.dao.burningman.BurningManPresentationService; -import bisq.core.dao.burningman.LegacyBurningMan; +import bisq.core.dao.burningman.model.BurningManCandidate; +import bisq.core.dao.burningman.model.LegacyBurningMan; import bisq.core.dao.governance.proofofburn.ProofOfBurnService; import bisq.core.dao.governance.proposal.TxException; import bisq.core.dao.state.DaoStateListener; diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java index 895205fba8..2e12392bcc 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java @@ -19,7 +19,7 @@ package bisq.desktop.main.dao.burnbsq.burningmen; import bisq.desktop.util.DisplayUtils; -import bisq.core.dao.burningman.CompensationModel; +import bisq.core.dao.burningman.model.CompensationModel; import bisq.core.util.coin.BsqFormatter; import java.util.Date; diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java index 5116f28ef2..1a3f695ff8 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java @@ -19,7 +19,7 @@ package bisq.desktop.main.dao.burnbsq.burningmen; import bisq.desktop.util.DisplayUtils; -import bisq.core.dao.burningman.ReimbursementModel; +import bisq.core.dao.burningman.model.ReimbursementModel; import bisq.core.util.coin.BsqFormatter; import java.util.Date; From 0e7958281988c27e071d7759c4bb16a9cd7d93ae Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 17 Nov 2022 18:52:28 -0500 Subject: [PATCH 56/86] Refactoring: Move isActivated method to BurningManService Signed-off-by: HenrikJannsen --- .../bisq/core/dao/burningman/BurningManService.java | 12 ++++++++++++ .../burningman/DelayedPayoutTxReceiverService.java | 10 ---------- .../main/java/bisq/core/offer/OpenOfferManager.java | 3 ++- .../buyer/BuyerVerifiesFinalDelayedPayoutTx.java | 4 ++-- .../buyer/BuyerVerifiesPreparedDelayedPayoutTx.java | 4 ++-- .../MakerProcessesInputsForDepositTxRequest.java | 4 ++-- .../tasks/seller/SellerCreatesDelayedPayoutTx.java | 4 ++-- 7 files changed, 22 insertions(+), 19 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index 7f5c988d63..4ba06c353b 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -35,6 +35,9 @@ import bisq.core.dao.state.model.governance.IssuanceType; import bisq.network.p2p.storage.P2PDataStorage; +import bisq.common.app.DevEnv; +import bisq.common.util.Utilities; + import javax.inject.Inject; import javax.inject.Singleton; @@ -43,6 +46,8 @@ import com.google.common.base.Charsets; import com.google.common.collect.ImmutableList; import java.util.Collection; +import java.util.Date; +import java.util.GregorianCalendar; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @@ -61,6 +66,12 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @Singleton public class BurningManService { + private static final Date ACTIVATION_DATE = Utilities.getUTCDate(2023, GregorianCalendar.JANUARY, 1); + + public static boolean isActivated() { + return DevEnv.isDevTesting() || new Date().after(ACTIVATION_DATE); + } + // Parameters // Cannot be changed after release as it would break trade protocol verification of DPT receivers. @@ -68,6 +79,7 @@ public class BurningManService { // Used as pre-image for burning. public static final String GENESIS_OUTPUT_PREFIX = "Bisq co-founder "; + // Factor for weighting the genesis output amounts. private static final double GENESIS_OUTPUT_AMOUNT_FACTOR = 0.05; diff --git a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java index 32cf2034ed..b879aeb12f 100644 --- a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java +++ b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java @@ -23,9 +23,7 @@ import bisq.core.dao.state.DaoStateListener; import bisq.core.dao.state.DaoStateService; import bisq.core.dao.state.model.blockchain.Block; -import bisq.common.app.DevEnv; import bisq.common.util.Tuple2; -import bisq.common.util.Utilities; import javax.inject.Inject; import javax.inject.Singleton; @@ -34,8 +32,6 @@ import com.google.common.annotations.VisibleForTesting; import java.util.Collection; import java.util.Comparator; -import java.util.Date; -import java.util.GregorianCalendar; import java.util.List; import java.util.stream.Collectors; @@ -50,8 +46,6 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @Singleton public class DelayedPayoutTxReceiverService implements DaoStateListener { - private static final Date ACTIVATION_DATE = Utilities.getUTCDate(2023, GregorianCalendar.JANUARY, 1); - // One part of the limit for the min. amount to be included in the DPT outputs. // The miner fee rate multiplied by 2 times the output size is the other factor. // The higher one of both is used. 1000 sat is about 2 USD @ 20k price. @@ -69,10 +63,6 @@ public class DelayedPayoutTxReceiverService implements DaoStateListener { // spike when opening arbitration. private static final long DPT_MIN_TX_FEE_RATE = 10; - public static boolean isActivated() { - return DevEnv.isDevTesting() || new Date().after(ACTIVATION_DATE); - } - private final DaoStateService daoStateService; private final BurningManService burningManService; diff --git a/core/src/main/java/bisq/core/offer/OpenOfferManager.java b/core/src/main/java/bisq/core/offer/OpenOfferManager.java index 6f90133091..c3ab839966 100644 --- a/core/src/main/java/bisq/core/offer/OpenOfferManager.java +++ b/core/src/main/java/bisq/core/offer/OpenOfferManager.java @@ -23,6 +23,7 @@ import bisq.core.btc.wallet.BtcWalletService; import bisq.core.btc.wallet.TradeWalletService; import bisq.core.dao.DaoFacade; import bisq.core.dao.burningman.BtcFeeReceiverService; +import bisq.core.dao.burningman.BurningManService; import bisq.core.dao.burningman.DelayedPayoutTxReceiverService; import bisq.core.exceptions.TradePriceOutOfToleranceException; import bisq.core.filter.FilterManager; @@ -672,7 +673,7 @@ public class OpenOfferManager implements PeerManager.Listener, DecryptedDirectMe return; } - if (DelayedPayoutTxReceiverService.isActivated()) { + if (BurningManService.isActivated()) { try { int takersBurningManSelectionHeight = request.getBurningManSelectionHeight(); checkArgument(takersBurningManSelectionHeight > 0, "takersBurningManSelectionHeight must not be 0"); diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java index 00c16a57ed..ba05dacec9 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesFinalDelayedPayoutTx.java @@ -18,7 +18,7 @@ package bisq.core.trade.protocol.bisq_v1.tasks.buyer; import bisq.core.btc.wallet.BtcWalletService; -import bisq.core.dao.burningman.DelayedPayoutTxReceiverService; +import bisq.core.dao.burningman.BurningManService; import bisq.core.trade.bisq_v1.TradeDataValidation; import bisq.core.trade.model.bisq_v1.Trade; import bisq.core.trade.protocol.bisq_v1.tasks.TradeTask; @@ -60,7 +60,7 @@ public class BuyerVerifiesFinalDelayedPayoutTx extends TradeTask { // Now as we know the deposit tx we can also verify the input TradeDataValidation.validatePayoutTxInput(depositTx, finalDelayedPayoutTx); - if (DelayedPayoutTxReceiverService.isActivated()) { + if (BurningManService.isActivated()) { long inputAmount = depositTx.getOutput(0).getValue().value; long tradeTxFeeAsLong = trade.getTradeTxFeeAsLong(); int selectionHeight = processModel.getBurningManSelectionHeight(); diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesPreparedDelayedPayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesPreparedDelayedPayoutTx.java index 7650ce8af0..9f7e9c0d5f 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesPreparedDelayedPayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/buyer/BuyerVerifiesPreparedDelayedPayoutTx.java @@ -18,7 +18,7 @@ package bisq.core.trade.protocol.bisq_v1.tasks.buyer; import bisq.core.btc.wallet.BtcWalletService; -import bisq.core.dao.burningman.DelayedPayoutTxReceiverService; +import bisq.core.dao.burningman.BurningManService; import bisq.core.trade.bisq_v1.TradeDataValidation; import bisq.core.trade.model.bisq_v1.Trade; import bisq.core.trade.protocol.bisq_v1.tasks.TradeTask; @@ -53,7 +53,7 @@ public class BuyerVerifiesPreparedDelayedPayoutTx extends TradeTask { btcWalletService); Transaction preparedDepositTx = btcWalletService.getTxFromSerializedTx(processModel.getPreparedDepositTx()); - if (DelayedPayoutTxReceiverService.isActivated()) { + if (BurningManService.isActivated()) { long inputAmount = preparedDepositTx.getOutput(0).getValue().value; long tradeTxFeeAsLong = trade.getTradeTxFeeAsLong(); List> delayedPayoutTxReceivers = processModel.getDelayedPayoutTxReceiverService().getReceivers( diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/maker/MakerProcessesInputsForDepositTxRequest.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/maker/MakerProcessesInputsForDepositTxRequest.java index 6628593e92..aefe9f609a 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/maker/MakerProcessesInputsForDepositTxRequest.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/maker/MakerProcessesInputsForDepositTxRequest.java @@ -17,7 +17,7 @@ package bisq.core.trade.protocol.bisq_v1.tasks.maker; -import bisq.core.dao.burningman.DelayedPayoutTxReceiverService; +import bisq.core.dao.burningman.BurningManService; import bisq.core.exceptions.TradePriceOutOfToleranceException; import bisq.core.offer.Offer; import bisq.core.support.dispute.mediation.mediator.Mediator; @@ -80,7 +80,7 @@ public class MakerProcessesInputsForDepositTxRequest extends TradeTask { tradingPeer.setAccountId(nonEmptyStringOf(request.getTakerAccountId())); - if (DelayedPayoutTxReceiverService.isActivated()) { + if (BurningManService.isActivated()) { int takersBurningManSelectionHeight = request.getBurningManSelectionHeight(); checkArgument(takersBurningManSelectionHeight > 0, "takersBurningManSelectionHeight must not be 0"); diff --git a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java index 28ce2ec378..9a0346fab1 100644 --- a/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java +++ b/core/src/main/java/bisq/core/trade/protocol/bisq_v1/tasks/seller/SellerCreatesDelayedPayoutTx.java @@ -18,7 +18,7 @@ package bisq.core.trade.protocol.bisq_v1.tasks.seller; import bisq.core.btc.wallet.TradeWalletService; -import bisq.core.dao.burningman.DelayedPayoutTxReceiverService; +import bisq.core.dao.burningman.BurningManService; import bisq.core.dao.governance.param.Param; import bisq.core.trade.bisq_v1.TradeDataValidation; import bisq.core.trade.model.bisq_v1.Trade; @@ -51,7 +51,7 @@ public class SellerCreatesDelayedPayoutTx extends TradeTask { TradeWalletService tradeWalletService = processModel.getTradeWalletService(); Transaction depositTx = checkNotNull(processModel.getDepositTx()); Transaction preparedDelayedPayoutTx; - if (DelayedPayoutTxReceiverService.isActivated()) { + if (BurningManService.isActivated()) { long inputAmount = depositTx.getOutput(0).getValue().value; long tradeTxFeeAsLong = trade.getTradeTxFeeAsLong(); int selectionHeight = processModel.getBurningManSelectionHeight(); From 8ab2582db64764be65b6d99c9884f7571f6ae776 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 17 Nov 2022 18:55:02 -0500 Subject: [PATCH 57/86] Use check for isRegtest instead of test for isDevTesting to set dev parameters Signed-off-by: HenrikJannsen --- .../main/java/bisq/core/dao/burningman/BurnTargetService.java | 4 ++-- .../core/dao/burningman/BurningManPresentationService.java | 4 ++-- .../main/java/bisq/core/dao/burningman/BurningManService.java | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java index ee5eda26b0..8ee1094d32 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java @@ -31,7 +31,7 @@ import bisq.core.dao.state.model.governance.Issuance; import bisq.core.dao.state.model.governance.IssuanceType; import bisq.core.dao.state.model.governance.ReimbursementProposal; -import bisq.common.app.DevEnv; +import bisq.common.config.Config; import bisq.common.util.Hex; import javax.inject.Inject; @@ -59,7 +59,7 @@ class BurnTargetService { // Default value for the estimated BTC trade fees per month as BSQ sat value (100 sat = 1 BSQ). // Default is roughly average of last 12 months at Nov 2022. // Can be changed with DAO parameter voting. - private static final long DEFAULT_ESTIMATED_BTC_TRADE_FEE_REVENUE_PER_CYCLE = DevEnv.isDevTesting() ? 1000000 : 6200000; + private static final long DEFAULT_ESTIMATED_BTC_TRADE_FEE_REVENUE_PER_CYCLE = Config.baseCurrencyNetwork().isRegtest() ? 1000000 : 6200000; private final DaoStateService daoStateService; private final CyclesInDaoStateService cyclesInDaoStateService; diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java index ffd4d80011..e88ccb8c89 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java @@ -35,7 +35,7 @@ import bisq.core.dao.state.model.governance.Proposal; import bisq.network.p2p.storage.P2PDataStorage; -import bisq.common.app.DevEnv; +import bisq.common.config.Config; import bisq.common.util.Hex; import bisq.common.util.Tuple2; @@ -58,7 +58,7 @@ import lombok.extern.slf4j.Slf4j; public class BurningManPresentationService implements DaoStateListener { // Burn target gets increased by that amount to give more flexibility. // Burn target is calculated from reimbursements + estimated BTC fees - burned amounts. - static final long BURN_TARGET_BOOST_AMOUNT = DevEnv.isDevTesting() ? 1000000 : 10000000; + static final long BURN_TARGET_BOOST_AMOUNT = Config.baseCurrencyNetwork().isRegtest() ? 1000000 : 10000000; public static final String LEGACY_BURNING_MAN_NAME = "Legacy Burningman"; private final DaoStateService daoStateService; diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index 4ba06c353b..c0e9ca3b64 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -35,7 +35,7 @@ import bisq.core.dao.state.model.governance.IssuanceType; import bisq.network.p2p.storage.P2PDataStorage; -import bisq.common.app.DevEnv; +import bisq.common.config.Config; import bisq.common.util.Utilities; import javax.inject.Inject; @@ -69,7 +69,7 @@ public class BurningManService { private static final Date ACTIVATION_DATE = Utilities.getUTCDate(2023, GregorianCalendar.JANUARY, 1); public static boolean isActivated() { - return DevEnv.isDevTesting() || new Date().after(ACTIVATION_DATE); + return Config.baseCurrencyNetwork().isRegtest() || new Date().after(ACTIVATION_DATE); } // Parameters From d30ec07d94f801ba0abcc963631115e145dc7798 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 17 Nov 2022 18:56:28 -0500 Subject: [PATCH 58/86] Cleanup/add comments Signed-off-by: HenrikJannsen --- .../java/bisq/core/dao/burningman/BurnTargetService.java | 6 +----- .../core/dao/burningman/BurningManPresentationService.java | 3 +++ .../java/bisq/core/dao/burningman/BurningManService.java | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java index 8ee1094d32..c770d4ddda 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurnTargetService.java @@ -194,7 +194,6 @@ class BurnTargetService { private long getBurnedAmountFromLegacyBurningManDPT(Set proofOfBurnTxs, int chainHeight, int fromBlock) { - // Burningman // Legacy burningman use those opReturn data to mark their burn transactions from delayed payout transaction cases. // opReturn data from delayed payout txs when BM traded with the refund agent: 1701e47e5d8030f444c182b5e243871ebbaeadb5e82f // opReturn data from delayed payout txs when BM traded with traders who got reimbursed by the DAO: 1701293c488822f98e70e047012f46f5f1647f37deb7 @@ -211,10 +210,7 @@ class BurnTargetService { } private long getBurnedAmountFromLegacyBurningMansBtcFees(Set proofOfBurnTxs, int chainHeight, int fromBlock) { - // Burningman - // Legacy burningman use those opReturn data to mark their burn transactions from delayed payout transaction cases. - // opReturn data from delayed payout txs when BM traded with the refund agent: 1701e47e5d8030f444c182b5e243871ebbaeadb5e82f - // opReturn data from delayed payout txs when BM traded with traders who got reimbursed by the DAO: 1701293c488822f98e70e047012f46f5f1647f37deb7 + // Legacy burningman use the below opReturn data to mark their burn transactions from Btc trade fees. return proofOfBurnTxs.stream() .filter(tx -> tx.getBlockHeight() > fromBlock) .filter(tx -> tx.getBlockHeight() <= chainHeight) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java index e88ccb8c89..77f96f6f09 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java @@ -53,6 +53,9 @@ import java.util.stream.Collectors; import lombok.extern.slf4j.Slf4j; +/** + * Provides APIs for burningman data representation in the UI. + */ @Slf4j @Singleton public class BurningManPresentationService implements DaoStateListener { diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index c0e9ca3b64..3bf29b3649 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -93,7 +93,7 @@ public class BurningManService { // This will be used for increasing the allowed burn amount. The factor gives more flexibility // and compensates for those who do not burn. The burn share is capped by that factor as well. // E.g. a contributor with 10% issuance share will be able to receive max 20% of the BTC fees or DPT output - // even if they would have burned more and had a higher burn share than 20%. + // even if they had burned more and had a higher burn share than 20%. public static final double ISSUANCE_BOOST_FACTOR = 2; // The max amount the burn share can reach. This value is derived from the min. security deposit in a trade and From 4e08bcd53d610e349220ecba85e65408d8bd7535 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 17 Nov 2022 19:05:41 -0500 Subject: [PATCH 59/86] Split up legacy BM into DPT and BTC fee BM Signed-off-by: HenrikJannsen --- .../BurningManPresentationService.java | 63 ++++++++++++++----- .../burnbsq/burningmen/BurningmenView.java | 8 ++- 2 files changed, 52 insertions(+), 19 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java index 77f96f6f09..03a0cde705 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java @@ -62,7 +62,9 @@ public class BurningManPresentationService implements DaoStateListener { // Burn target gets increased by that amount to give more flexibility. // Burn target is calculated from reimbursements + estimated BTC fees - burned amounts. static final long BURN_TARGET_BOOST_AMOUNT = Config.baseCurrencyNetwork().isRegtest() ? 1000000 : 10000000; - public static final String LEGACY_BURNING_MAN_NAME = "Legacy Burningman"; + public static final String LEGACY_BURNING_MAN_DPT_NAME = "Legacy Burningman (DPT)"; + public static final String LEGACY_BURNING_MAN_BTC_FEES_NAME = "Legacy Burningman (BTC fees)"; + public static final String LEGACY_BURNING_MAN_BTC_FEES_ADDRESS = "38bZBj5peYS3Husdz7AH3gEUiUbYRD951t"; private final DaoStateService daoStateService; private final CyclesInDaoStateService cyclesInDaoStateService; @@ -79,7 +81,8 @@ public class BurningManPresentationService implements DaoStateListener { private Set myCompensationRequestNames = null; @SuppressWarnings("OptionalAssignedToNull") private Optional> myGenesisOutputNames = null; - private Optional legacyBurningMan = Optional.empty(); + private Optional legacyBurningManDPT = Optional.empty(); + private Optional legacyBurningManBtcFees = Optional.empty(); private final Map> proofOfBurnOpReturnTxOutputByHash = new HashMap<>(); @Inject @@ -116,7 +119,8 @@ public class BurningManPresentationService implements DaoStateListener { burnTarget = Optional.empty(); myCompensationRequestNames = null; averageDistributionPerCycle = Optional.empty(); - legacyBurningMan = Optional.empty(); + legacyBurningManDPT = Optional.empty(); + legacyBurningManBtcFees = Optional.empty(); proofOfBurnOpReturnTxOutputByHash.clear(); } @@ -246,23 +250,41 @@ public class BurningManPresentationService implements DaoStateListener { return burningManCandidatesByName; } - public LegacyBurningMan getLegacyBurningMan() { - if (legacyBurningMan.isPresent()) { - return legacyBurningMan.get(); - } - - if (proofOfBurnOpReturnTxOutputByHash.isEmpty()) { - proofOfBurnOpReturnTxOutputByHash.putAll(burningManService.getProofOfBurnOpReturnTxOutputByHash(currentChainHeight)); + public LegacyBurningMan getLegacyBurningManForDPT() { + if (legacyBurningManDPT.isPresent()) { + return legacyBurningManDPT.get(); } // We do not add the legacy burningman to the list but keep it as class field only to avoid that it // interferes with usage of the burningManCandidatesByName map. - LegacyBurningMan legacyBurningMan = new LegacyBurningMan(burningManService.getLegacyBurningManAddress(currentChainHeight)); - // Those are the hashes used by legacy BM for burning + // Those are the hashes used by legacy BM for burning BTC received from DPT. Set hashes = Set.of("1701e47e5d8030f444c182b5e243871ebbaeadb5e82f", - "1701293c488822f98e70e047012f46f5f1647f37deb7", - "1701721206fe6b40777763de1c741f4fd2706d94775d"); - proofOfBurnOpReturnTxOutputByHash.values().stream() + "1701293c488822f98e70e047012f46f5f1647f37deb7"); + LegacyBurningMan legacyBurningManDPT = getLegacyBurningMan(burningManService.getLegacyBurningManAddress(currentChainHeight), hashes); + + this.legacyBurningManDPT = Optional.of(legacyBurningManDPT); + return legacyBurningManDPT; + } + + public LegacyBurningMan getLegacyBurningManForBtcFees() { + if (legacyBurningManBtcFees.isPresent()) { + return legacyBurningManBtcFees.get(); + } + + // We do not add the legacy burningman to the list but keep it as class field only to avoid that it + // interferes with usage of the burningManCandidatesByName map. + // The hash used by legacy BM for burning BTC received from BTC trade fees. + Set hashes = Set.of("1701721206fe6b40777763de1c741f4fd2706d94775d"); + LegacyBurningMan legacyBurningManBtcFees = getLegacyBurningMan(LEGACY_BURNING_MAN_BTC_FEES_ADDRESS, hashes); + + this.legacyBurningManBtcFees = Optional.of(legacyBurningManBtcFees); + return legacyBurningManBtcFees; + } + + private LegacyBurningMan getLegacyBurningMan(String address, Set hashes) { + LegacyBurningMan legacyBurningMan = new LegacyBurningMan(address); + // The hashes used by legacy BM at burning BSQ. + getProofOfBurnOpReturnTxOutputByHash().values().stream() .flatMap(txOutputs -> txOutputs.stream() .filter(txOutput -> { String hash = Hex.encode(txOutput.getOpReturnData()); @@ -286,8 +308,15 @@ public class BurningManPresentationService implements DaoStateListener { .mapToDouble(BurningManCandidate::getCappedBurnAmountShare) .sum(); legacyBurningMan.applyBurnAmountShare(1 - burnAmountShareOfOthers); - - this.legacyBurningMan = Optional.of(legacyBurningMan); return legacyBurningMan; } + + private Map> getProofOfBurnOpReturnTxOutputByHash() { + if (!proofOfBurnOpReturnTxOutputByHash.isEmpty()) { + return proofOfBurnOpReturnTxOutputByHash; + } + + proofOfBurnOpReturnTxOutputByHash.putAll(burningManService.getProofOfBurnOpReturnTxOutputByHash(currentChainHeight)); + return proofOfBurnOpReturnTxOutputByHash; + } } diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java index 23debed3bd..dfd720e466 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java @@ -447,8 +447,12 @@ public class BurningmenView extends ActivatableView implements .map(entry -> new BurningmenListItem(burningManPresentationService, entry.getKey(), entry.getValue(), bsqFormatter)) .collect(Collectors.toList())); burningmenObservableList.add(new BurningmenListItem(burningManPresentationService, - BurningManPresentationService.LEGACY_BURNING_MAN_NAME, - burningManPresentationService.getLegacyBurningMan(), + BurningManPresentationService.LEGACY_BURNING_MAN_BTC_FEES_NAME, + burningManPresentationService.getLegacyBurningManForBtcFees(), + bsqFormatter)); + burningmenObservableList.add(new BurningmenListItem(burningManPresentationService, + BurningManPresentationService.LEGACY_BURNING_MAN_DPT_NAME, + burningManPresentationService.getLegacyBurningManForDPT(), bsqFormatter)); reimbursementObservableList.setAll(burningManPresentationService.getReimbursements().stream() .map(reimbursementModel -> new ReimbursementListItem(reimbursementModel, bsqFormatter)) From 4ce6ce745a34217fe79c788ebabe0bee913c0ad6 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 17 Nov 2022 19:06:13 -0500 Subject: [PATCH 60/86] Add check for isActivated and if not return LEGACY_BURNING_MAN_BTC_FEES_ADDRESS Signed-off-by: HenrikJannsen --- .../java/bisq/core/dao/burningman/BtcFeeReceiverService.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java index 925a8063b6..8e042d7edb 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BtcFeeReceiverService.java @@ -70,6 +70,11 @@ public class BtcFeeReceiverService implements DaoStateListener { /////////////////////////////////////////////////////////////////////////////////////////// public String getAddress() { + if (!BurningManService.isActivated()) { + // Before activation, we fall back to the current fee receiver address + return BurningManPresentationService.LEGACY_BURNING_MAN_BTC_FEES_ADDRESS; + } + Map burningManCandidatesByName = burningManService.getBurningManCandidatesByName(currentChainHeight); if (burningManCandidatesByName.isEmpty()) { // If there are no compensation requests (e.g. at dev testing) we fall back to the default address From 7cbc5d6263d3bb41fa1326e12c8c7cedc8747d6e Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 17 Nov 2022 19:08:05 -0500 Subject: [PATCH 61/86] Increase ISSUANCE_BOOST_FACTOR to 3 Signed-off-by: HenrikJannsen --- .../java/bisq/core/dao/burningman/BurningManService.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index 3bf29b3649..f61f098b28 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -77,8 +77,7 @@ public class BurningManService { // Prefix for generic names for the genesis outputs. Appended with output index. // Used as pre-image for burning. - public static final String GENESIS_OUTPUT_PREFIX = "Bisq co-founder "; - + static final String GENESIS_OUTPUT_PREFIX = "Bisq co-founder "; // Factor for weighting the genesis output amounts. private static final double GENESIS_OUTPUT_AMOUNT_FACTOR = 0.05; @@ -94,7 +93,7 @@ public class BurningManService { // and compensates for those who do not burn. The burn share is capped by that factor as well. // E.g. a contributor with 10% issuance share will be able to receive max 20% of the BTC fees or DPT output // even if they had burned more and had a higher burn share than 20%. - public static final double ISSUANCE_BOOST_FACTOR = 2; + public static final double ISSUANCE_BOOST_FACTOR = 3; // The max amount the burn share can reach. This value is derived from the min. security deposit in a trade and // ensures that an attack where a BM would take all sell offers cannot be economically profitable as they would From eeaafc1e040dd4eb0c385df642e0058990525649 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 21 Nov 2022 18:45:01 -0500 Subject: [PATCH 62/86] Use HashSet instead Lists. Remove sorting as not needed. Signed-off-by: HenrikJannsen --- .../dao/burningman/model/BurningManCandidate.java | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/model/BurningManCandidate.java b/core/src/main/java/bisq/core/dao/burningman/model/BurningManCandidate.java index 158d0b0435..bf4867e7b2 100644 --- a/core/src/main/java/bisq/core/dao/burningman/model/BurningManCandidate.java +++ b/core/src/main/java/bisq/core/dao/burningman/model/BurningManCandidate.java @@ -19,10 +19,10 @@ package bisq.core.dao.burningman.model; import bisq.core.dao.burningman.BurningManService; -import java.util.ArrayList; import java.util.Comparator; -import java.util.List; +import java.util.HashSet; import java.util.Optional; +import java.util.Set; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -36,13 +36,13 @@ import lombok.extern.slf4j.Slf4j; @Getter @EqualsAndHashCode public class BurningManCandidate { - private final List compensationModels = new ArrayList<>(); + private final Set compensationModels = new HashSet<>(); private long accumulatedCompensationAmount; private long accumulatedDecayedCompensationAmount; private double compensationShare; // Share of accumulated decayed compensation amounts in relation to total issued amounts protected Optional mostRecentAddress = Optional.empty(); - private final List burnOutputModels = new ArrayList<>(); + private final Set burnOutputModels = new HashSet<>(); private long accumulatedBurnAmount; private long accumulatedDecayedBurnAmount; protected double burnAmountShare; // Share of accumulated decayed burn amounts in relation to total burned amounts @@ -56,7 +56,6 @@ public class BurningManCandidate { return; } burnOutputModels.add(burnOutputModel); - burnOutputModels.sort(Comparator.comparing(BurnOutputModel::getTxId)); accumulatedDecayedBurnAmount += burnOutputModel.getDecayedAmount(); accumulatedBurnAmount += burnOutputModel.getAmount(); @@ -68,10 +67,6 @@ public class BurningManCandidate { } compensationModels.add(compensationModel); - // For genesis outputs we have same txId, so we use also output index to ensure deterministic sort order. - // For normal comp requests its Optional.empty. - compensationModels.sort(Comparator.comparing(CompensationModel::getTxId) - .thenComparing(model -> model.getOutputIndex().orElse(-1))); accumulatedDecayedCompensationAmount += compensationModel.getDecayedAmount(); accumulatedCompensationAmount += compensationModel.getAmount(); From fa4c9524099ad2786851b7462e03daf7982082c4 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Sun, 27 Nov 2022 16:35:09 -0500 Subject: [PATCH 63/86] Apply code review feedback Signed-off-by: HenrikJannsen --- .../dao/burningman/BurningManService.java | 27 ++++++++------- .../resources/i18n/displayStrings.properties | 2 +- .../dao/burningman/BurningManServiceTest.java | 33 +++++++++---------- 3 files changed, 30 insertions(+), 32 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index f61f098b28..223bd7eafa 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -237,6 +237,7 @@ public class BurningManService { private long getIssuanceAmountForCompensationRequest(Issuance issuance) { // There was a reimbursement for a conference sponsorship with 44776 BSQ. We remove that as well. + // TODO Maybe remove in final version if we stick with 2 years going back for comp. requests (its older than 2 years) // See https://github.com/bisq-network/compensation/issues/498 if (issuance.getTxId().equals("01455fc4c88fca0665a5f56a90ff03fb9e3e88c3430ffc5217246e32d180aa64")) { return 119400; // That was the compensation part @@ -246,6 +247,7 @@ public class BurningManService { } private boolean isValidReimbursement(String name, int cycleIndex, long issuanceAmount) { + // TODO Maybe remove in final version if we stick with 2 years going back for comp. requests (its older than 2 years) // Up to cycle 15 the RefundAgent made reimbursement requests as compensation requests. We filter out those entries. // As it is mixed with RefundAgents real compensation requests we take out all above 3500 BSQ. boolean isReimbursementOfRefundAgent = name.equals("RefundAgent") && cycleIndex <= 15 && issuanceAmount > 350000; @@ -253,19 +255,18 @@ public class BurningManService { } private long getDecayedCompensationAmount(long amount, int issuanceHeight, int chainHeight) { - int fromHeight = cyclesInDaoStateService.getChainHeightOfPastCycle(chainHeight, NUM_CYCLES_COMP_REQUEST_DECAY); - return getDecayedAmount(amount, issuanceHeight, chainHeight, fromHeight, 0); + int chainHeightOfPastCycle = cyclesInDaoStateService.getChainHeightOfPastCycle(chainHeight, NUM_CYCLES_COMP_REQUEST_DECAY); + return getDecayedAmount(amount, issuanceHeight, chainHeight, chainHeightOfPastCycle); } - // Linear decay between currentBlockHeight (100% of amount) and issuanceHeight (firstBlockOffset % of amount) - // Values below firstBlockHeight will use the firstBlockOffset as factor for the amount. - // E.g. if firstBlockOffset is 0.1 the decay goes to 10% and earlier values stay at 10%. + // Linear decay between currentBlockHeight (100% of amount) and issuanceHeight + // chainHeightOfPastCycle is currentBlockHeight - numCycles*cycleDuration. It changes with each block and + // distance to currentBlockHeight is the same if cycle durations have not changed (possible via DAo voting but never done). @VisibleForTesting static long getDecayedAmount(long amount, int issuanceHeight, int currentBlockHeight, - int firstBlockHeight, - double firstBlockOffset) { + int chainHeightOfPastCycle) { if (issuanceHeight > currentBlockHeight) throw new IllegalArgumentException("issuanceHeight must not be larger than currentBlockHeight. issuanceHeight=" + issuanceHeight + "; currentBlockHeight=" + currentBlockHeight); if (currentBlockHeight < 0) @@ -275,13 +276,12 @@ public class BurningManService { if (issuanceHeight < 0) throw new IllegalArgumentException("issuanceHeight must not be negative. issuanceHeight=" + issuanceHeight); - if (currentBlockHeight <= firstBlockHeight) { + if (currentBlockHeight <= chainHeightOfPastCycle) { return amount; } - double factor = Math.max(0, (issuanceHeight - firstBlockHeight) / (double) (currentBlockHeight - firstBlockHeight)); - double factorWithOffset = firstBlockOffset + factor * (1 - firstBlockOffset); - long weighted = Math.round(amount * factorWithOffset); + double factor = Math.max(0, (issuanceHeight - chainHeightOfPastCycle) / (double) (currentBlockHeight - chainHeightOfPastCycle)); + long weighted = Math.round(amount * factor); return Math.max(0, weighted); } @@ -319,12 +319,11 @@ public class BurningManService { } private long getDecayedBurnedAmount(long amount, int issuanceHeight, int chainHeight) { - int fromHeight = cyclesInDaoStateService.getChainHeightOfPastCycle(chainHeight, NUM_CYCLES_BURN_AMOUNT_DECAY); + int chainHeightOfPastCycle = cyclesInDaoStateService.getChainHeightOfPastCycle(chainHeight, NUM_CYCLES_BURN_AMOUNT_DECAY); return getDecayedAmount(amount, issuanceHeight, chainHeight, - fromHeight, - 0); + chainHeightOfPastCycle); } private long getDecayedGenesisOutputAmount(long amount) { diff --git a/core/src/main/resources/i18n/displayStrings.properties b/core/src/main/resources/i18n/displayStrings.properties index c5f1015edb..0d5827c72d 100644 --- a/core/src/main/resources/i18n/displayStrings.properties +++ b/core/src/main/resources/i18n/displayStrings.properties @@ -2799,7 +2799,7 @@ disputeSummaryWindow.requestingTxs=Requesting blockchain transactions from block disputeSummaryWindow.requestTransactionsError=Requesting the 4 trade transactions failed. Error message: {0}.\n\n\ Please verify the transactions manually before closing the dispute. disputeSummaryWindow.delayedPayoutTxVerificationFailed=Verification of the delayed payout transaction failed. Error message: {0}.\n\n\ - Please do not make the payout but get in touch with developers to clearify the case. + Please do not make the payout but get in touch with developers to clarify the case. # dynamic values are not recognized by IntelliJ # suppress inspection "UnusedProperty" diff --git a/core/src/test/java/bisq/core/dao/burningman/BurningManServiceTest.java b/core/src/test/java/bisq/core/dao/burningman/BurningManServiceTest.java index 4b5aa74d49..a103af81f3 100644 --- a/core/src/test/java/bisq/core/dao/burningman/BurningManServiceTest.java +++ b/core/src/test/java/bisq/core/dao/burningman/BurningManServiceTest.java @@ -31,24 +31,23 @@ public class BurningManServiceTest { public void testGetDecayedAmount() { long amount = 100; int currentBlockHeight = 1400; - int genesisBlockHeight = 1000; - assertEquals(0, BurningManService.getDecayedAmount(amount, 1000, currentBlockHeight, genesisBlockHeight, 0)); - assertEquals(25, BurningManService.getDecayedAmount(amount, 1100, currentBlockHeight, genesisBlockHeight, 0)); - assertEquals(50, BurningManService.getDecayedAmount(amount, 1200, currentBlockHeight, genesisBlockHeight, 0)); - assertEquals(75, BurningManService.getDecayedAmount(amount, 1300, currentBlockHeight, genesisBlockHeight, 0)); + int fromBlockHeight = 1000; + int heightOfFirstBlockOfCurrentCycle = 1400; + assertEquals(0, BurningManService.getDecayedAmount(amount, 1000, currentBlockHeight, fromBlockHeight)); + assertEquals(25, BurningManService.getDecayedAmount(amount, 1100, currentBlockHeight, fromBlockHeight)); + assertEquals(50, BurningManService.getDecayedAmount(amount, 1200, currentBlockHeight, fromBlockHeight)); + assertEquals(75, BurningManService.getDecayedAmount(amount, 1300, currentBlockHeight, fromBlockHeight)); - // let genesis have an offset. e.g. 0.5 means an amount at genesis has 50% decay - assertEquals(50, BurningManService.getDecayedAmount(amount, 1000, currentBlockHeight, genesisBlockHeight, 0.5)); - assertEquals(75, BurningManService.getDecayedAmount(amount, 1200, currentBlockHeight, genesisBlockHeight, 0.5)); - assertEquals(100, BurningManService.getDecayedAmount(amount, 1400, currentBlockHeight, genesisBlockHeight, 0.5)); + // cycles with 100 blocks, issuance at block 20, look-back period 3 cycles + assertEquals(40, BurningManService.getDecayedAmount(amount, 120, 300, 0)); + assertEquals(33, BurningManService.getDecayedAmount(amount, 120, 320, 20)); + assertEquals(27, BurningManService.getDecayedAmount(amount, 120, 340, 40)); + assertEquals(20, BurningManService.getDecayedAmount(amount, 120, 360, 60)); + assertEquals(13, BurningManService.getDecayedAmount(amount, 120, 380, 80)); + assertEquals(7, BurningManService.getDecayedAmount(amount, 120, 399, 99)); + assertEquals(7, BurningManService.getDecayedAmount(amount, 120, 400, 100)); + assertEquals(3, BurningManService.getDecayedAmount(amount, 120, 410, 110)); + assertEquals(40, BurningManService.getDecayedAmount(amount, 220, 400, 100)); - assertEquals(50, BurningManService.getDecayedAmount(amount, 1200, currentBlockHeight, genesisBlockHeight, 0)); - assertEquals(75, BurningManService.getDecayedAmount(amount, 1200, currentBlockHeight, genesisBlockHeight, 0.5)); - assertEquals(63, BurningManService.getDecayedAmount(amount, 1200, currentBlockHeight, genesisBlockHeight, 0.25)); - assertEquals(88, BurningManService.getDecayedAmount(amount, 1200, currentBlockHeight, genesisBlockHeight, 0.75)); - - assertEquals(100, BurningManService.getDecayedAmount(amount, 1000, currentBlockHeight, genesisBlockHeight, 1)); - assertEquals(100, BurningManService.getDecayedAmount(amount, 1200, currentBlockHeight, genesisBlockHeight, 1)); - assertEquals(100, BurningManService.getDecayedAmount(amount, 1400, currentBlockHeight, genesisBlockHeight, 1)); } } From 97ba1560bed34a56ff0a18f2323ed7a93d8b78dc Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Sun, 27 Nov 2022 16:38:37 -0500 Subject: [PATCH 64/86] Improve receiver distribution to avoid that legacy BM gets outputs if some outputs fall below the min. amount limit. Signed-off-by: HenrikJannsen --- .../DelayedPayoutTxReceiverService.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java index b879aeb12f..288b8f5bb6 100644 --- a/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java +++ b/core/src/main/java/bisq/core/dao/burningman/DelayedPayoutTxReceiverService.java @@ -130,11 +130,24 @@ public class DelayedPayoutTxReceiverService implements DaoStateListener { // We only use outputs > 1000 sat or at least 2 times the cost for the output (32 bytes). // If we remove outputs it will be spent as miner fee. long minOutputAmount = Math.max(DPT_MIN_OUTPUT_AMOUNT, txFeePerVbyte * 32 * 2); + // We accumulate small amounts which gets filtered out and subtract it from 1 to get an adjustment factor + // used later to be applied to the remaining burningmen share. + double adjustment = 1 - burningManCandidates.stream() + .filter(candidate -> candidate.getMostRecentAddress().isPresent()) + .mapToDouble(candidate -> { + double cappedBurnAmountShare = candidate.getCappedBurnAmountShare(); + long amount = Math.round(cappedBurnAmountShare * spendableAmount); + return amount < minOutputAmount ? cappedBurnAmountShare : 0d; + }) + .sum(); List> receivers = burningManCandidates.stream() .filter(candidate -> candidate.getMostRecentAddress().isPresent()) - .map(candidate -> new Tuple2<>(Math.round(candidate.getCappedBurnAmountShare() * spendableAmount), - candidate.getMostRecentAddress().get())) + .map(candidate -> { + double cappedBurnAmountShare = candidate.getCappedBurnAmountShare() / adjustment; + return new Tuple2<>(Math.round(cappedBurnAmountShare * spendableAmount), + candidate.getMostRecentAddress().get()); + }) .filter(tuple -> tuple.first >= minOutputAmount) .sorted(Comparator., Long>comparing(tuple -> tuple.first) .thenComparing(tuple -> tuple.second)) From d12c8b5fc4457f1e0622ee0842f388fb417e9e29 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Sun, 27 Nov 2022 18:04:22 -0500 Subject: [PATCH 65/86] Remove TODO, rename method Signed-off-by: HenrikJannsen --- .../java/bisq/core/dao/burningman/BurningManService.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java index 223bd7eafa..306a388bad 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManService.java @@ -141,7 +141,7 @@ public class BurningManService { int issuanceHeight = issuance.getChainHeight(); long issuanceAmount = getIssuanceAmountForCompensationRequest(issuance); int cycleIndex = cyclesInDaoStateService.getCycleIndexAtChainHeight(issuanceHeight); - if (isValidReimbursement(name, cycleIndex, issuanceAmount)) { + if (isValidCompensationRequest(name, cycleIndex, issuanceAmount)) { long decayedIssuanceAmount = getDecayedCompensationAmount(issuanceAmount, issuanceHeight, chainHeight); long issuanceDate = daoStateService.getBlockTime(issuanceHeight); candidate.addCompensationModel(CompensationModel.fromCompensationRequest(address, @@ -237,7 +237,6 @@ public class BurningManService { private long getIssuanceAmountForCompensationRequest(Issuance issuance) { // There was a reimbursement for a conference sponsorship with 44776 BSQ. We remove that as well. - // TODO Maybe remove in final version if we stick with 2 years going back for comp. requests (its older than 2 years) // See https://github.com/bisq-network/compensation/issues/498 if (issuance.getTxId().equals("01455fc4c88fca0665a5f56a90ff03fb9e3e88c3430ffc5217246e32d180aa64")) { return 119400; // That was the compensation part @@ -246,8 +245,7 @@ public class BurningManService { } } - private boolean isValidReimbursement(String name, int cycleIndex, long issuanceAmount) { - // TODO Maybe remove in final version if we stick with 2 years going back for comp. requests (its older than 2 years) + private boolean isValidCompensationRequest(String name, int cycleIndex, long issuanceAmount) { // Up to cycle 15 the RefundAgent made reimbursement requests as compensation requests. We filter out those entries. // As it is mixed with RefundAgents real compensation requests we take out all above 3500 BSQ. boolean isReimbursementOfRefundAgent = name.equals("RefundAgent") && cycleIndex <= 15 && issuanceAmount > 350000; From adb02428eee2bc903879cb54e2a988284494500e Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Fri, 9 Dec 2022 10:53:46 -0500 Subject: [PATCH 66/86] Remove unused var Signed-off-by: HenrikJannsen --- .../java/bisq/core/dao/burningman/BurningManServiceTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core/src/test/java/bisq/core/dao/burningman/BurningManServiceTest.java b/core/src/test/java/bisq/core/dao/burningman/BurningManServiceTest.java index a103af81f3..09c68527f4 100644 --- a/core/src/test/java/bisq/core/dao/burningman/BurningManServiceTest.java +++ b/core/src/test/java/bisq/core/dao/burningman/BurningManServiceTest.java @@ -32,7 +32,6 @@ public class BurningManServiceTest { long amount = 100; int currentBlockHeight = 1400; int fromBlockHeight = 1000; - int heightOfFirstBlockOfCurrentCycle = 1400; assertEquals(0, BurningManService.getDecayedAmount(amount, 1000, currentBlockHeight, fromBlockHeight)); assertEquals(25, BurningManService.getDecayedAmount(amount, 1100, currentBlockHeight, fromBlockHeight)); assertEquals(50, BurningManService.getDecayedAmount(amount, 1200, currentBlockHeight, fromBlockHeight)); From ff558304057db80f9aba944635310d40d8a222d8 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 21 Nov 2022 18:46:56 -0500 Subject: [PATCH 67/86] Add DateUtil and Hex.decodeLast4Bytes Signed-off-by: HenrikJannsen --- .../main/java/bisq/common/util/DateUtil.java | 60 +++++++++++++++++++ .../src/main/java/bisq/common/util/Hex.java | 4 ++ 2 files changed, 64 insertions(+) create mode 100644 common/src/main/java/bisq/common/util/DateUtil.java diff --git a/common/src/main/java/bisq/common/util/DateUtil.java b/common/src/main/java/bisq/common/util/DateUtil.java new file mode 100644 index 0000000000..15199e826b --- /dev/null +++ b/common/src/main/java/bisq/common/util/DateUtil.java @@ -0,0 +1,60 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.common.util; + +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; + +public class DateUtil { + /** + * + * @param date The date which should be reset to first day of month + * @return First day in given date with time set to zero. + */ + public static Date getStartOfMonth(Date date) { + Calendar calendar = new GregorianCalendar(); + calendar.setTime(date); + calendar.set(Calendar.DAY_OF_MONTH, 1); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + return calendar.getTime(); + } + + /** + * + * @param year The year + * @param month The month starts with 0 for January + * @return First day in given month with time set to zero. + */ + public static Date getStartOfMonth(int year, int month) { + Calendar calendar = new GregorianCalendar(); + calendar.setTime(new Date()); + calendar.set(Calendar.YEAR, year); + calendar.set(Calendar.MONTH, month); + calendar.set(Calendar.DAY_OF_MONTH, 1); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + calendar.set(Calendar.MILLISECOND, 0); + Date time = calendar.getTime(); + return time; + } +} diff --git a/common/src/main/java/bisq/common/util/Hex.java b/common/src/main/java/bisq/common/util/Hex.java index 5edcce6602..4088d0f632 100644 --- a/common/src/main/java/bisq/common/util/Hex.java +++ b/common/src/main/java/bisq/common/util/Hex.java @@ -28,4 +28,8 @@ public class Hex { public static String encode(byte[] bytes) { return BaseEncoding.base16().lowerCase().encode(bytes); } + + public static byte[] decodeLast4Bytes(String hex) { + return decode(hex.substring(hex.length() - 8)); + } } From 26153099315a4801354fb68274b091572bc80285 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 21 Nov 2022 18:47:56 -0500 Subject: [PATCH 68/86] Add Config options --- .../main/java/bisq/common/config/Config.java | 26 +++++++++++++++++++ .../main/java/bisq/core/dao/DaoModule.java | 3 +++ 2 files changed, 29 insertions(+) diff --git a/common/src/main/java/bisq/common/config/Config.java b/common/src/main/java/bisq/common/config/Config.java index 985f578428..414d65fef8 100644 --- a/common/src/main/java/bisq/common/config/Config.java +++ b/common/src/main/java/bisq/common/config/Config.java @@ -129,6 +129,9 @@ public class Config { public static final String BYPASS_MEMPOOL_VALIDATION = "bypassMempoolValidation"; public static final String DAO_NODE_API_URL = "daoNodeApiUrl"; public static final String DAO_NODE_API_PORT = "daoNodeApiPort"; + public static final String IS_BM_FULL_NODE = "isBmFullNode"; + public static final String BM_ORACLE_NODE_PUB_KEY = "bmOracleNodePubKey"; + public static final String BM_ORACLE_NODE_PRIV_KEY = "bmOracleNodePrivKey"; public static final String SEED_NODE_REPORTING_SERVER_URL = "seedNodeReportingServerUrl"; // Default values for certain options @@ -221,6 +224,9 @@ public class Config { public final boolean bypassMempoolValidation; public final String daoNodeApiUrl; public final int daoNodeApiPort; + public final boolean isBmFullNode; + public final String bmOracleNodePubKey; + public final String bmOracleNodePrivKey; public final String seedNodeReportingServerUrl; // Properties derived from options but not exposed as options themselves @@ -681,6 +687,23 @@ public class Config { .withRequiredArg() .ofType(Integer.class) .defaultsTo(8082); + + ArgumentAcceptingOptionSpec isBmFullNode = + parser.accepts(IS_BM_FULL_NODE, "Run as Burningman full node") + .withRequiredArg() + .ofType(boolean.class) + .defaultsTo(false); + + ArgumentAcceptingOptionSpec bmOracleNodePubKey = + parser.accepts(BM_ORACLE_NODE_PUB_KEY, "Burningman oracle node public key") + .withRequiredArg() + .defaultsTo(""); + + ArgumentAcceptingOptionSpec bmOracleNodePrivKey = + parser.accepts(BM_ORACLE_NODE_PRIV_KEY, "Burningman oracle node private key") + .withRequiredArg() + .defaultsTo(""); + ArgumentAcceptingOptionSpec seedNodeReportingServerUrlOpt = parser.accepts(SEED_NODE_REPORTING_SERVER_URL, "URL of seed node reporting server") .withRequiredArg() @@ -806,6 +829,9 @@ public class Config { this.bypassMempoolValidation = options.valueOf(bypassMempoolValidationOpt); this.daoNodeApiUrl = options.valueOf(daoNodeApiUrlOpt); this.daoNodeApiPort = options.valueOf(daoNodeApiPortOpt); + this.isBmFullNode = options.valueOf(isBmFullNode); + this.bmOracleNodePubKey = options.valueOf(bmOracleNodePubKey); + this.bmOracleNodePrivKey = options.valueOf(bmOracleNodePrivKey); this.seedNodeReportingServerUrl = options.valueOf(seedNodeReportingServerUrlOpt); } catch (OptionException ex) { throw new ConfigException("problem parsing option '%s': %s", diff --git a/core/src/main/java/bisq/core/dao/DaoModule.java b/core/src/main/java/bisq/core/dao/DaoModule.java index 1bcd45e140..3d10caedb8 100644 --- a/core/src/main/java/bisq/core/dao/DaoModule.java +++ b/core/src/main/java/bisq/core/dao/DaoModule.java @@ -222,6 +222,9 @@ public class DaoModule extends AppModule { bindConstant().annotatedWith(named(Config.RPC_BLOCK_NOTIFICATION_HOST)).to(config.rpcBlockNotificationHost); bindConstant().annotatedWith(named(Config.DUMP_BLOCKCHAIN_DATA)).to(config.dumpBlockchainData); bindConstant().annotatedWith(named(Config.FULL_DAO_NODE)).to(config.fullDaoNode); + bindConstant().annotatedWith(named(Config.IS_BM_FULL_NODE)).to(config.isBmFullNode); + bindConstant().annotatedWith(named(Config.BM_ORACLE_NODE_PUB_KEY)).to(config.bmOracleNodePubKey); + bindConstant().annotatedWith(named(Config.BM_ORACLE_NODE_PRIV_KEY)).to(config.bmOracleNodePrivKey); } } From bc9ccfd0e91d1bdcdc8ca68d19f70c0dfe1c1296 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 21 Nov 2022 18:49:40 -0500 Subject: [PATCH 69/86] Add `String formatCoin(long value)` API to CoinFormatter Signed-off-by: HenrikJannsen --- core/src/main/java/bisq/core/util/coin/BsqFormatter.java | 2 +- core/src/main/java/bisq/core/util/coin/CoinFormatter.java | 2 ++ .../java/bisq/core/util/coin/ImmutableCoinFormatter.java | 5 +++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/bisq/core/util/coin/BsqFormatter.java b/core/src/main/java/bisq/core/util/coin/BsqFormatter.java index 4909b5bd02..7e1545eccd 100644 --- a/core/src/main/java/bisq/core/util/coin/BsqFormatter.java +++ b/core/src/main/java/bisq/core/util/coin/BsqFormatter.java @@ -222,7 +222,7 @@ public class BsqFormatter implements CoinFormatter { } public String formatCoin(long value) { - return formatCoin(Coin.valueOf(value), false); + return formatCoin(Coin.valueOf(value)); } public String formatCoin(Coin coin) { diff --git a/core/src/main/java/bisq/core/util/coin/CoinFormatter.java b/core/src/main/java/bisq/core/util/coin/CoinFormatter.java index 2b65460e6b..c6c4c31786 100644 --- a/core/src/main/java/bisq/core/util/coin/CoinFormatter.java +++ b/core/src/main/java/bisq/core/util/coin/CoinFormatter.java @@ -5,6 +5,8 @@ import org.bitcoinj.core.Coin; public interface CoinFormatter { String formatCoin(Coin coin); + String formatCoin(long value); + String formatCoin(Coin coin, boolean appendCode); String formatCoin(Coin coin, int decimalPlaces); diff --git a/core/src/main/java/bisq/core/util/coin/ImmutableCoinFormatter.java b/core/src/main/java/bisq/core/util/coin/ImmutableCoinFormatter.java index 80a9d7ef86..07116a71bc 100644 --- a/core/src/main/java/bisq/core/util/coin/ImmutableCoinFormatter.java +++ b/core/src/main/java/bisq/core/util/coin/ImmutableCoinFormatter.java @@ -53,6 +53,11 @@ public class ImmutableCoinFormatter implements CoinFormatter { return formatCoin(coin, -1); } + @Override + public String formatCoin(long value) { + return formatCoin(Coin.valueOf(value)); + } + @Override public String formatCoin(Coin coin, boolean appendCode) { return appendCode ? formatCoinWithCode(coin) : formatCoin(coin); From e2f7c4e103b562ed8b9a492cc7c3bbb883ef19c2 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 21 Nov 2022 18:52:09 -0500 Subject: [PATCH 70/86] Make AveragePriceUtil.getAveragePriceTuple mor flexible Add filter for before date Signed-off-by: HenrikJannsen --- .../java/bisq/core/util/AveragePriceUtil.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/bisq/core/util/AveragePriceUtil.java b/core/src/main/java/bisq/core/util/AveragePriceUtil.java index beb320e0e2..fd1f8e65df 100644 --- a/core/src/main/java/bisq/core/util/AveragePriceUtil.java +++ b/core/src/main/java/bisq/core/util/AveragePriceUtil.java @@ -42,11 +42,26 @@ public class AveragePriceUtil { public static Tuple2 getAveragePriceTuple(Preferences preferences, TradeStatisticsManager tradeStatisticsManager, int days) { + return getAveragePriceTuple(preferences, tradeStatisticsManager, days, new Date()); + } + + public static Tuple2 getAveragePriceTuple(Preferences preferences, + TradeStatisticsManager tradeStatisticsManager, + int days, + Date date) { + Date pastXDays = getPastDate(days, date); + return getAveragePriceTuple(preferences, tradeStatisticsManager, pastXDays, date); + } + + public static Tuple2 getAveragePriceTuple(Preferences preferences, + TradeStatisticsManager tradeStatisticsManager, + Date pastXDays, + Date date) { double percentToTrim = Math.max(0, Math.min(49, preferences.getBsqAverageTrimThreshold() * 100)); - Date pastXDays = getPastDate(days); List bsqAllTradePastXDays = tradeStatisticsManager.getObservableTradeStatisticsSet().stream() .filter(e -> e.getCurrency().equals("BSQ")) .filter(e -> e.getDate().after(pastXDays)) + .filter(e -> e.getDate().before(date)) .collect(Collectors.toList()); List bsqTradePastXDays = percentToTrim > 0 ? removeOutliers(bsqAllTradePastXDays, percentToTrim) : @@ -55,6 +70,7 @@ public class AveragePriceUtil { List usdAllTradePastXDays = tradeStatisticsManager.getObservableTradeStatisticsSet().stream() .filter(e -> e.getCurrency().equals("USD")) .filter(e -> e.getDate().after(pastXDays)) + .filter(e -> e.getDate().before(date)) .collect(Collectors.toList()); List usdTradePastXDays = percentToTrim > 0 ? removeOutliers(usdAllTradePastXDays, percentToTrim) : @@ -103,7 +119,7 @@ public class AveragePriceUtil { var usdBTCPrice = 10000d; // Default to 10000 USD per BTC if there is no USD feed at all for (TradeStatistics3 item : bsqList) { - // Find usdprice for trade item + // Find usd price for trade item usdBTCPrice = usdList.stream() .filter(usd -> usd.getDateAsLong() > item.getDateAsLong()) .map(usd -> MathUtils.scaleDownByPowerOf10((double) usd.getTradePrice().getValue(), @@ -130,9 +146,9 @@ public class AveragePriceUtil { return averagePrice; } - private static Date getPastDate(int days) { + private static Date getPastDate(int days, Date date) { Calendar cal = new GregorianCalendar(); - cal.setTime(new Date()); + cal.setTime(date); cal.add(Calendar.DAY_OF_MONTH, -1 * days); return cal.getTime(); } From a551a41e5ad84e26d9a45658120a7ac402e90352 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 21 Nov 2022 18:57:00 -0500 Subject: [PATCH 71/86] Add support for multiple clients calling the setup method. Signed-off-by: HenrikJannsen --- .../bisq/core/dao/node/full/RpcService.java | 39 +++++++++++++++++-- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/node/full/RpcService.java b/core/src/main/java/bisq/core/dao/node/full/RpcService.java index 48aebf84b9..ac6bed9f28 100644 --- a/core/src/main/java/bisq/core/dao/node/full/RpcService.java +++ b/core/src/main/java/bisq/core/dao/node/full/RpcService.java @@ -56,6 +56,8 @@ import java.io.IOException; import java.math.BigDecimal; import java.util.List; +import java.util.Set; +import java.util.concurrent.CopyOnWriteArraySet; import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; @@ -91,6 +93,9 @@ public class RpcService { // Keep that for optimization after measuring performance differences private final ListeningExecutorService executor = Utilities.getSingleThreadListeningExecutor("RpcService"); private volatile boolean isShutDown; + private final Set setupResultHandlers = new CopyOnWriteArraySet<>(); + private final Set> setupErrorHandlers = new CopyOnWriteArraySet<>(); + private volatile boolean setupComplete; /////////////////////////////////////////////////////////////////////////////////////////// @@ -139,7 +144,20 @@ public class RpcService { executor.shutdown(); } - void setup(ResultHandler resultHandler, Consumer errorHandler) { + public void setup(ResultHandler resultHandler, Consumer errorHandler) { + if (setupComplete) { + // Setup got already called and has finished. + resultHandler.handleResult(); + return; + } else { + setupResultHandlers.add(resultHandler); + setupErrorHandlers.add(errorHandler); + if (setupResultHandlers.size() > 1) { + // Setup got already called but has not finished yet. + return; + } + } + try { ListenableFuture future = executor.submit(() -> { try { @@ -159,7 +177,11 @@ public class RpcService { daemon = new BitcoindDaemon(rpcBlockHost, rpcBlockPort, throwable -> { log.error(throwable.toString()); throwable.printStackTrace(); - UserThread.execute(() -> errorHandler.accept(new RpcException(throwable))); + UserThread.execute(() -> { + setupErrorHandlers.forEach(handler -> handler.accept(new RpcException(throwable))); + setupErrorHandlers.clear(); + setupResultHandlers.clear(); + }); }); log.info("Setup took {} ms", System.currentTimeMillis() - startTs); @@ -173,11 +195,20 @@ public class RpcService { Futures.addCallback(future, new FutureCallback<>() { public void onSuccess(Void ignore) { - UserThread.execute(resultHandler::handleResult); + setupComplete = true; + UserThread.execute(() -> { + setupResultHandlers.forEach(ResultHandler::handleResult); + setupResultHandlers.clear(); + setupErrorHandlers.clear(); + }); } public void onFailure(@NotNull Throwable throwable) { - UserThread.execute(() -> errorHandler.accept(throwable)); + UserThread.execute(() -> { + setupErrorHandlers.forEach(handler -> handler.accept(throwable)); + setupErrorHandlers.clear(); + setupResultHandlers.clear(); + }); } }, MoreExecutors.directExecutor()); } catch (Exception e) { From f9db6e0d5c4a4ce02d7e14284acaa6815c1a965a Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 21 Nov 2022 19:05:11 -0500 Subject: [PATCH 72/86] Add support for multiple clients adding a block handler. Add requestRawDtoBlock method. Rename to make different block types more clear. Change visibility --- .../bisq/core/dao/node/full/RpcException.java | 2 +- .../bisq/core/dao/node/full/RpcService.java | 84 +++++++++++++++++-- 2 files changed, 77 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/bisq/core/dao/node/full/RpcException.java b/core/src/main/java/bisq/core/dao/node/full/RpcException.java index 92defd15c5..32987e2349 100644 --- a/core/src/main/java/bisq/core/dao/node/full/RpcException.java +++ b/core/src/main/java/bisq/core/dao/node/full/RpcException.java @@ -17,7 +17,7 @@ package bisq.core.dao.node.full; -class RpcException extends Exception { +public class RpcException extends Exception { RpcException(String message, Throwable cause) { super(message, cause); } diff --git a/core/src/main/java/bisq/core/dao/node/full/RpcService.java b/core/src/main/java/bisq/core/dao/node/full/RpcService.java index ac6bed9f28..d7e557db38 100644 --- a/core/src/main/java/bisq/core/dao/node/full/RpcService.java +++ b/core/src/main/java/bisq/core/dao/node/full/RpcService.java @@ -96,6 +96,11 @@ public class RpcService { private final Set setupResultHandlers = new CopyOnWriteArraySet<>(); private final Set> setupErrorHandlers = new CopyOnWriteArraySet<>(); private volatile boolean setupComplete; + private Consumer rawDtoBlockHandler; + private Consumer rawDtoBlockErrorHandler; + private Consumer rawBlockHandler; + private Consumer rawBlockErrorHandler; + private volatile boolean isBlockHandlerSet; /////////////////////////////////////////////////////////////////////////////////////////// @@ -250,21 +255,49 @@ public class RpcService { void addNewDtoBlockHandler(Consumer dtoBlockHandler, Consumer errorHandler) { + this.rawBlockHandler = dtoBlockHandler; + this.rawBlockErrorHandler = errorHandler; + if (!isBlockHandlerSet) { + setupBlockHandler(); + } + } + + public void addNewRawDtoBlockHandler(Consumer rawDtoBlockHandler, + Consumer errorHandler) { + this.rawDtoBlockHandler = rawDtoBlockHandler; + this.rawDtoBlockErrorHandler = errorHandler; + if (!isBlockHandlerSet) { + setupBlockHandler(); + } + } + + private void setupBlockHandler() { + isBlockHandlerSet = true; daemon.setBlockListener(blockHash -> { try { - var rawDtoBlock = client.getBlock(blockHash, 2); - log.info("New block received: height={}, id={}", rawDtoBlock.getHeight(), rawDtoBlock.getHash()); + RawDtoBlock rawDtoBlock = client.getBlock(blockHash, 2); + log.info("New rawDtoBlock received: height={}, hash={}", rawDtoBlock.getHeight(), rawDtoBlock.getHash()); - var block = getBlockFromRawDtoBlock(rawDtoBlock); - UserThread.execute(() -> dtoBlockHandler.accept(block)); + if (rawBlockHandler != null) { + RawBlock rawBlock = getRawBlockFromRawDtoBlock(rawDtoBlock); + UserThread.execute(() -> rawBlockHandler.accept(rawBlock)); + } + if (rawDtoBlockHandler != null) { + UserThread.execute(() -> rawDtoBlockHandler.accept(rawDtoBlock)); + } } catch (Throwable throwable) { log.error("Error at BlockHandler", throwable); - errorHandler.accept(throwable); + if (rawBlockErrorHandler != null) { + rawBlockErrorHandler.accept(throwable); + } + if (rawDtoBlockErrorHandler != null) { + rawDtoBlockErrorHandler.accept(throwable); + } } }); } - void requestChainHeadHeight(Consumer resultHandler, Consumer errorHandler) { + public void requestChainHeadHeight(Consumer resultHandler, Consumer errorHandler) { try { ListenableFuture future = executor.submit(client::getBlockCount); Futures.addCallback(future, new FutureCallback<>() { @@ -293,7 +326,7 @@ public class RpcService { long startTs = System.currentTimeMillis(); String blockHash = client.getBlockHash(blockHeight); var rawDtoBlock = client.getBlock(blockHash, 2); - var block = getBlockFromRawDtoBlock(rawDtoBlock); + var block = getRawBlockFromRawDtoBlock(rawDtoBlock); log.info("requestDtoBlock from bitcoind at blockHeight {} with {} txs took {} ms", blockHeight, block.getRawTxs().size(), System.currentTimeMillis() - startTs); return block; @@ -320,12 +353,47 @@ public class RpcService { } } + public void requestRawDtoBlock(int blockHeight, + Consumer rawDtoBlockHandler, + Consumer errorHandler) { + try { + ListenableFuture future = executor.submit(() -> { + long startTs = System.currentTimeMillis(); + String blockHash = client.getBlockHash(blockHeight); + + // getBlock with about 2000 tx takes about 500 ms on a 4GHz Intel Core i7 CPU. + var rawDtoBlock = client.getBlock(blockHash, 2); + log.info("requestRawDtoBlock from bitcoind at blockHeight {} with {} txs took {} ms", + blockHeight, rawDtoBlock.getTx().size(), System.currentTimeMillis() - startTs); + return rawDtoBlock; + }); + + Futures.addCallback(future, new FutureCallback<>() { + @Override + public void onSuccess(RawDtoBlock rawDtoBlock) { + UserThread.execute(() -> rawDtoBlockHandler.accept(rawDtoBlock)); + } + + @Override + public void onFailure(@NotNull Throwable throwable) { + log.error("Error at requestRawDtoBlock: blockHeight={}", blockHeight); + UserThread.execute(() -> errorHandler.accept(throwable)); + } + }, MoreExecutors.directExecutor()); + } catch (Exception e) { + if (!isShutDown || !(e instanceof RejectedExecutionException)) { + log.warn(e.toString(), e); + throw e; + } + } + } + /////////////////////////////////////////////////////////////////////////////////////////// // Private /////////////////////////////////////////////////////////////////////////////////////////// - private static RawBlock getBlockFromRawDtoBlock(RawDtoBlock rawDtoBlock) { + private static RawBlock getRawBlockFromRawDtoBlock(RawDtoBlock rawDtoBlock) { List txList = rawDtoBlock.getTx().stream() .map(e -> getTxFromRawTransaction(e, rawDtoBlock)) .collect(Collectors.toList()); From d4a0032965d634129f990246669f5b79777d5f5a Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 21 Nov 2022 19:08:08 -0500 Subject: [PATCH 73/86] Add new fields and methods Signed-off-by: HenrikJannsen --- .../BurningManPresentationService.java | 30 +++++++++++++++++++ .../burningman/model/BurningManCandidate.java | 15 ++++++++++ .../burningman/model/LegacyBurningMan.java | 7 +++++ 3 files changed, 52 insertions(+) diff --git a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java index 03a0cde705..c993ddeacf 100644 --- a/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java +++ b/core/src/main/java/bisq/core/dao/burningman/BurningManPresentationService.java @@ -84,6 +84,7 @@ public class BurningManPresentationService implements DaoStateListener { private Optional legacyBurningManDPT = Optional.empty(); private Optional legacyBurningManBtcFees = Optional.empty(); private final Map> proofOfBurnOpReturnTxOutputByHash = new HashMap<>(); + private final Map burningManNameByAddress = new HashMap<>(); @Inject public BurningManPresentationService(DaoStateService daoStateService, @@ -122,6 +123,7 @@ public class BurningManPresentationService implements DaoStateListener { legacyBurningManDPT = Optional.empty(); legacyBurningManBtcFees = Optional.empty(); proofOfBurnOpReturnTxOutputByHash.clear(); + burningManNameByAddress.clear(); } @@ -311,6 +313,34 @@ public class BurningManPresentationService implements DaoStateListener { return legacyBurningMan; } + public Map getBurningManNameByAddress() { + if (!burningManNameByAddress.isEmpty()) { + return burningManNameByAddress; + } + // clone to not alter source map. We do not store legacy BM in the source map. + Map burningManCandidatesByName = new HashMap<>(getBurningManCandidatesByName()); + burningManCandidatesByName.put(LEGACY_BURNING_MAN_DPT_NAME, getLegacyBurningManForDPT()); + burningManCandidatesByName.put(LEGACY_BURNING_MAN_BTC_FEES_NAME, getLegacyBurningManForBtcFees()); + + Map> receiverAddressesByBurningManName = new HashMap<>(); + burningManCandidatesByName.forEach((name, burningManCandidate) -> { + receiverAddressesByBurningManName.putIfAbsent(name, new HashSet<>()); + receiverAddressesByBurningManName.get(name).addAll(burningManCandidate.getAllAddresses()); + }); + + + Map map = new HashMap<>(); + receiverAddressesByBurningManName + .forEach((name, addresses) -> addresses + .forEach(address -> map.putIfAbsent(address, name))); + burningManNameByAddress.putAll(map); + return burningManNameByAddress; + } + + public String getGenesisTxId() { + return daoStateService.getGenesisTxId(); + } + private Map> getProofOfBurnOpReturnTxOutputByHash() { if (!proofOfBurnOpReturnTxOutputByHash.isEmpty()) { return proofOfBurnOpReturnTxOutputByHash; diff --git a/core/src/main/java/bisq/core/dao/burningman/model/BurningManCandidate.java b/core/src/main/java/bisq/core/dao/burningman/model/BurningManCandidate.java index bf4867e7b2..32f35e91bb 100644 --- a/core/src/main/java/bisq/core/dao/burningman/model/BurningManCandidate.java +++ b/core/src/main/java/bisq/core/dao/burningman/model/BurningManCandidate.java @@ -19,10 +19,16 @@ package bisq.core.dao.burningman.model; import bisq.core.dao.burningman.BurningManService; +import bisq.common.util.DateUtil; + import java.util.Comparator; +import java.util.Date; +import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.stream.Collectors; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -43,6 +49,7 @@ public class BurningManCandidate { protected Optional mostRecentAddress = Optional.empty(); private final Set burnOutputModels = new HashSet<>(); + private final Map> burnOutputModelsByMonth = new HashMap<>(); private long accumulatedBurnAmount; private long accumulatedDecayedBurnAmount; protected double burnAmountShare; // Share of accumulated decayed burn amounts in relation to total burned amounts @@ -57,6 +64,10 @@ public class BurningManCandidate { } burnOutputModels.add(burnOutputModel); + Date month = DateUtil.getStartOfMonth(new Date(burnOutputModel.getDate())); + burnOutputModelsByMonth.putIfAbsent(month, new HashSet<>()); + burnOutputModelsByMonth.get(month).add(burnOutputModel); + accumulatedDecayedBurnAmount += burnOutputModel.getDecayedAmount(); accumulatedBurnAmount += burnOutputModel.getAmount(); } @@ -76,6 +87,10 @@ public class BurningManCandidate { .map(CompensationModel::getAddress); } + public Set getAllAddresses() { + return compensationModels.stream().map(CompensationModel::getAddress).collect(Collectors.toSet()); + } + public void calculateShares(double totalDecayedCompensationAmounts, double totalDecayedBurnAmounts) { compensationShare = totalDecayedCompensationAmounts > 0 ? accumulatedDecayedCompensationAmount / totalDecayedCompensationAmounts : 0; double maxBoostedCompensationShare = Math.min(BurningManService.MAX_BURN_SHARE, compensationShare * BurningManService.ISSUANCE_BOOST_FACTOR); diff --git a/core/src/main/java/bisq/core/dao/burningman/model/LegacyBurningMan.java b/core/src/main/java/bisq/core/dao/burningman/model/LegacyBurningMan.java index a40715cdac..46244b362b 100644 --- a/core/src/main/java/bisq/core/dao/burningman/model/LegacyBurningMan.java +++ b/core/src/main/java/bisq/core/dao/burningman/model/LegacyBurningMan.java @@ -17,7 +17,9 @@ package bisq.core.dao.burningman.model; +import java.util.HashSet; import java.util.Optional; +import java.util.Set; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -40,4 +42,9 @@ public final class LegacyBurningMan extends BurningManCandidate { public void calculateShares(double totalDecayedCompensationAmounts, double totalDecayedBurnAmounts) { // do nothing } + + @Override + public Set getAllAddresses() { + return mostRecentAddress.map(Set::of).orElse(new HashSet<>()); + } } From 90550dee3f4659c39f82bf1220a61f7e914d8e3c Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 21 Nov 2022 19:10:31 -0500 Subject: [PATCH 74/86] Add messages and domain data for accounting domain Signed-off-by: HenrikJannsen --- .../blockchain/AccountingBlock.java | 112 ++++++++++++++++++ .../accounting/blockchain/AccountingTx.java | 87 ++++++++++++++ .../blockchain/AccountingTxOutput.java | 93 +++++++++++++++ .../messages/GetAccountingBlocksRequest.java | 110 +++++++++++++++++ .../messages/GetAccountingBlocksResponse.java | 109 +++++++++++++++++ .../NewAccountingBlockBroadcastMessage.java | 78 ++++++++++++ .../storage/BurningManAccountingStore.java | 57 +++++++++ .../network/CoreNetworkProtoResolver.java | 10 ++ .../CorePersistenceProtoResolver.java | 3 + proto/src/main/proto/pb.proto | 50 ++++++++ 10 files changed, 709 insertions(+) create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/AccountingBlock.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/AccountingTx.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/AccountingTxOutput.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/node/messages/GetAccountingBlocksRequest.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/node/messages/GetAccountingBlocksResponse.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/node/messages/NewAccountingBlockBroadcastMessage.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/storage/BurningManAccountingStore.java diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/AccountingBlock.java b/core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/AccountingBlock.java new file mode 100644 index 0000000000..e77341576f --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/AccountingBlock.java @@ -0,0 +1,112 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.blockchain; + +import bisq.common.proto.network.NetworkPayload; +import bisq.common.util.Hex; + +import com.google.protobuf.ByteString; + +import java.util.List; +import java.util.stream.Collectors; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +// Block data is aggressively optimized for minimal size. +// Block has 21 bytes base cost +// Tx has 2 byte base cost. +// TxOutput has variable byte size depending on name length, usually about 10-20 bytes. +// Some extra overhead of a few bytes is present depending on lists filled or not. +// Example fee tx (1 output) has about 40 bytes +// Example DPT tx with 2 outputs has about 60 bytes, typical DPT with 15-20 outputs might have 500 bytes. +// 2 year legacy BM had about 100k fee txs and 1000 DPTs. Would be about 4MB for fee txs and 500kB for DPT. +// As most blocks have at least 1 tx we might not have empty blocks. +// With above estimates we can expect about 2 MB growth per year. +@Slf4j +@EqualsAndHashCode + +public final class AccountingBlock implements NetworkPayload { + @Getter + private final int height; + private final int timeInSec; + // We use only last 4 bytes of 32 byte hash to save space. + // We use a byte array for flexibility if we would need to change the length of the hash later. + @Getter + private final byte[] truncatedHash; + @Getter + private final byte[] truncatedPreviousBlockHash; + @Getter + private final List txs; + + public AccountingBlock(int height, + int timeInSec, + byte[] truncatedHash, + byte[] truncatedPreviousBlockHash, + List txs) { + this.height = height; + this.timeInSec = timeInSec; + this.truncatedHash = truncatedHash; + this.truncatedPreviousBlockHash = truncatedPreviousBlockHash; + this.txs = txs; + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // PROTO BUFFER + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public protobuf.AccountingBlock toProtoMessage() { + return protobuf.AccountingBlock.newBuilder() + .setHeight(height) + .setTimeInSec(timeInSec) + .setTruncatedHash(ByteString.copyFrom(truncatedHash)) + .setTruncatedPreviousBlockHash(ByteString.copyFrom(truncatedPreviousBlockHash)) + .addAllTxs(txs.stream().map(AccountingTx::toProtoMessage).collect(Collectors.toList())) + .build(); + } + + public static AccountingBlock fromProto(protobuf.AccountingBlock proto) { + List txs = proto.getTxsList().stream() + .map(AccountingTx::fromProto) + .collect(Collectors.toList()); + // log.error("AccountingBlock.getSerializedSize {}, txs.size={}", proto.getSerializedSize(), txs.size()); + return new AccountingBlock(proto.getHeight(), + proto.getTimeInSec(), + proto.getTruncatedHash().toByteArray(), + proto.getTruncatedPreviousBlockHash().toByteArray(), + txs); + } + + public long getDate() { + return timeInSec * 1000L; + } + + @Override + public String toString() { + return "AccountingBlock{" + + "\r\n height=" + height + + ",\r\n timeInSec=" + timeInSec + + ",\r\n truncatedHash=" + Hex.encode(truncatedHash) + + ",\r\n truncatedPreviousBlockHash=" + Hex.encode(truncatedPreviousBlockHash) + + ",\r\n txs=" + txs + + "\r\n}"; + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/AccountingTx.java b/core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/AccountingTx.java new file mode 100644 index 0000000000..3c4c13af99 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/AccountingTx.java @@ -0,0 +1,87 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.blockchain; + +import bisq.common.proto.network.NetworkPayload; +import bisq.common.util.Hex; + +import com.google.protobuf.ByteString; + +import java.util.List; +import java.util.stream.Collectors; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@EqualsAndHashCode +@Getter +public final class AccountingTx implements NetworkPayload { + public enum Type { + BTC_TRADE_FEE_TX, + DPT_TX + } + + private final Type type; + private final List outputs; + // We store only last 4 bytes to have a unique ID. Chance for collusion is very low, and we take that risk that + // one object might get overridden in a hashset by the colluding truncatedTxId and all other data being the same as well. + private final byte[] truncatedTxId; + + public AccountingTx(Type type, List outputs, String txId) { + this(type, outputs, Hex.decodeLast4Bytes(txId)); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // PROTO BUFFER + /////////////////////////////////////////////////////////////////////////////////////////// + + private AccountingTx(Type type, List outputs, byte[] truncatedTxId) { + this.type = type; + this.outputs = outputs; + this.truncatedTxId = truncatedTxId; + } + + @Override + public protobuf.AccountingTx toProtoMessage() { + return protobuf.AccountingTx.newBuilder() + .setType(type.ordinal()) + .addAllOutputs(outputs.stream().map(AccountingTxOutput::toProtoMessage).collect(Collectors.toList())) + .setTruncatedTxId(ByteString.copyFrom(truncatedTxId)).build(); + } + + public static AccountingTx fromProto(protobuf.AccountingTx proto) { + List outputs = proto.getOutputsList().stream() + .map(AccountingTxOutput::fromProto) + .collect(Collectors.toList()); + return new AccountingTx(Type.values()[proto.getType()], + outputs, + proto.getTruncatedTxId().toByteArray()); + } + + @Override + public String toString() { + return "AccountingTx{" + + ",\n type='" + type + '\'' + + ",\n outputs=" + outputs + + ",\n truncatedTxId=" + Hex.encode(truncatedTxId) + + "\n }"; + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/AccountingTxOutput.java b/core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/AccountingTxOutput.java new file mode 100644 index 0000000000..9b9780cd28 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/AccountingTxOutput.java @@ -0,0 +1,93 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.blockchain; + +import bisq.core.dao.burningman.BurningManPresentationService; + +import bisq.common.proto.network.NetworkPayload; + +import org.bitcoinj.core.Coin; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +import static com.google.common.base.Preconditions.checkArgument; + +// Outputs get pruned to required number of outputs depending on tx type. +// We store value as integer in protobuf as we do not support larger amounts than 21.47483647 BTC for our tx types. +// Name is burningman candidate name. For legacy Burningman we shorten to safe space. +@Slf4j +@EqualsAndHashCode +public final class AccountingTxOutput implements NetworkPayload { + private static final String LEGACY_BM_FEES_SHORT = "LBMF"; + private static final String LEGACY_BM_DPT_SHORT = "LBMD"; + + @Getter + private final long value; + private final String name; + + public AccountingTxOutput(long value, String name) { + this.value = value; + this.name = maybeShortenLBM(name); + } + + private String maybeShortenLBM(String name) { + return name.equals(BurningManPresentationService.LEGACY_BURNING_MAN_BTC_FEES_NAME) ? + LEGACY_BM_FEES_SHORT : + name.equals(BurningManPresentationService.LEGACY_BURNING_MAN_DPT_NAME) ? + LEGACY_BM_DPT_SHORT : + name; + } + + public String getName() { + return name.equals(LEGACY_BM_FEES_SHORT) ? + BurningManPresentationService.LEGACY_BURNING_MAN_BTC_FEES_NAME : + name.equals(LEGACY_BM_DPT_SHORT) ? + BurningManPresentationService.LEGACY_BURNING_MAN_DPT_NAME : + name; + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // PROTO BUFFER + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public protobuf.AccountingTxOutput toProtoMessage() { + checkArgument(value < Coin.valueOf(2147483647).getValue(), + "We only support integer value in protobuf storage for the amount and it need to be below 21.47483647 BTC"); + return protobuf.AccountingTxOutput.newBuilder() + .setValue((int) value) + .setName(name).build(); + } + + public static AccountingTxOutput fromProto(protobuf.AccountingTxOutput proto) { + int intValue = proto.getValue(); + checkArgument(intValue >= 0, "Value must not be negative"); + return new AccountingTxOutput(intValue, proto.getName()); + } + + @Override + public String toString() { + return "AccountingTxOutput{" + + ",\r\n value=" + value + + ",\r\n name='" + name + '\'' + + "\r\n}"; + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/node/messages/GetAccountingBlocksRequest.java b/core/src/main/java/bisq/core/dao/burningman/accounting/node/messages/GetAccountingBlocksRequest.java new file mode 100644 index 0000000000..93a02bec08 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/node/messages/GetAccountingBlocksRequest.java @@ -0,0 +1,110 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.node.messages; + +import bisq.network.p2p.DirectMessage; +import bisq.network.p2p.InitialDataRequest; +import bisq.network.p2p.NodeAddress; +import bisq.network.p2p.SendersNodeAddressMessage; +import bisq.network.p2p.SupportedCapabilitiesMessage; + +import bisq.common.app.Capabilities; +import bisq.common.app.Version; +import bisq.common.proto.network.NetworkEnvelope; + +import java.util.Optional; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +@EqualsAndHashCode(callSuper = true) +@Getter +@Slf4j +public final class GetAccountingBlocksRequest extends NetworkEnvelope implements DirectMessage, SendersNodeAddressMessage, + SupportedCapabilitiesMessage, InitialDataRequest { + private final int fromBlockHeight; + private final int nonce; + + private final NodeAddress senderNodeAddress; + private final Capabilities supportedCapabilities; + + public GetAccountingBlocksRequest(int fromBlockHeight, + int nonce, + NodeAddress senderNodeAddress) { + this(fromBlockHeight, + nonce, + senderNodeAddress, + Capabilities.app, + Version.getP2PMessageVersion()); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // PROTO BUFFER + /////////////////////////////////////////////////////////////////////////////////////////// + + private GetAccountingBlocksRequest(int fromBlockHeight, + int nonce, + NodeAddress senderNodeAddress, + Capabilities supportedCapabilities, + int messageVersion) { + super(messageVersion); + this.fromBlockHeight = fromBlockHeight; + this.nonce = nonce; + this.senderNodeAddress = senderNodeAddress; + this.supportedCapabilities = supportedCapabilities; + } + + //todo + @Override + public protobuf.NetworkEnvelope toProtoNetworkEnvelope() { + protobuf.GetAccountingBlocksRequest.Builder builder = protobuf.GetAccountingBlocksRequest.newBuilder() + .setFromBlockHeight(fromBlockHeight) + .setNonce(nonce); + Optional.ofNullable(senderNodeAddress).ifPresent(e -> builder.setSenderNodeAddress(e.toProtoMessage())); + Optional.ofNullable(supportedCapabilities).ifPresent(e -> builder.addAllSupportedCapabilities(Capabilities.toIntList(supportedCapabilities))); + return getNetworkEnvelopeBuilder().setGetAccountingBlocksRequest(builder).build(); + } + + public static NetworkEnvelope fromProto(protobuf.GetAccountingBlocksRequest proto, int messageVersion) { + protobuf.NodeAddress protoNodeAddress = proto.getSenderNodeAddress(); + NodeAddress senderNodeAddress = protoNodeAddress.getHostName().isEmpty() ? + null : + NodeAddress.fromProto(protoNodeAddress); + Capabilities supportedCapabilities = proto.getSupportedCapabilitiesList().isEmpty() ? + null : + Capabilities.fromIntList(proto.getSupportedCapabilitiesList()); + return new GetAccountingBlocksRequest(proto.getFromBlockHeight(), + proto.getNonce(), + senderNodeAddress, + supportedCapabilities, + messageVersion); + } + + + @Override + public String toString() { + return "GetAccountingBlocksRequest{" + + "\n fromBlockHeight=" + fromBlockHeight + + ",\n nonce=" + nonce + + ",\n senderNodeAddress=" + senderNodeAddress + + ",\n supportedCapabilities=" + supportedCapabilities + + "\n} " + super.toString(); + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/node/messages/GetAccountingBlocksResponse.java b/core/src/main/java/bisq/core/dao/burningman/accounting/node/messages/GetAccountingBlocksResponse.java new file mode 100644 index 0000000000..c7e9eead8a --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/node/messages/GetAccountingBlocksResponse.java @@ -0,0 +1,109 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.node.messages; + + +import bisq.core.dao.burningman.accounting.blockchain.AccountingBlock; + +import bisq.network.p2p.DirectMessage; +import bisq.network.p2p.ExtendedDataSizePermission; +import bisq.network.p2p.InitialDataRequest; +import bisq.network.p2p.InitialDataResponse; + +import bisq.common.app.Version; +import bisq.common.proto.network.NetworkEnvelope; + +import com.google.protobuf.ByteString; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +@EqualsAndHashCode(callSuper = true) +@Getter +@Slf4j +public final class GetAccountingBlocksResponse extends NetworkEnvelope implements DirectMessage, + ExtendedDataSizePermission, InitialDataResponse { + private final List blocks; + private final int requestNonce; + private final String pubKey; + private final byte[] signature; + + public GetAccountingBlocksResponse(List blocks, + int requestNonce, + String pubKey, + byte[] signature) { + this(blocks, requestNonce, pubKey, signature, Version.getP2PMessageVersion()); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // PROTO BUFFER + /////////////////////////////////////////////////////////////////////////////////////////// + + private GetAccountingBlocksResponse(List blocks, + int requestNonce, + String pubKey, + byte[] signature, + int messageVersion) { + super(messageVersion); + + this.blocks = blocks; + this.requestNonce = requestNonce; + this.pubKey = pubKey; + this.signature = signature; + } + + @Override + public protobuf.NetworkEnvelope toProtoNetworkEnvelope() { + protobuf.NetworkEnvelope proto = getNetworkEnvelopeBuilder() + .setGetAccountingBlocksResponse(protobuf.GetAccountingBlocksResponse.newBuilder() + .addAllBlocks(blocks.stream() + .map(AccountingBlock::toProtoMessage) + .collect(Collectors.toList())) + .setRequestNonce(requestNonce) + .setPubKey(pubKey) + .setSignature(ByteString.copyFrom(signature))) + .build(); + log.info("Sending a GetBlocksResponse with {} kB", proto.getSerializedSize() / 1000d); + return proto; + } + + public static NetworkEnvelope fromProto(protobuf.GetAccountingBlocksResponse proto, int messageVersion) { + List list = proto.getBlocksList().stream() + .map(AccountingBlock::fromProto) + .collect(Collectors.toList()); + log.info("Received a GetBlocksResponse with {} blocks and {} kB size", list.size(), proto.getSerializedSize() / 1000d); + return new GetAccountingBlocksResponse(proto.getBlocksList().isEmpty() ? + new ArrayList<>() : + list, + proto.getRequestNonce(), + proto.getPubKey(), + proto.getSignature().toByteArray(), + messageVersion); + } + + @Override + public Class associatedRequest() { + return GetAccountingBlocksRequest.class; + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/node/messages/NewAccountingBlockBroadcastMessage.java b/core/src/main/java/bisq/core/dao/burningman/accounting/node/messages/NewAccountingBlockBroadcastMessage.java new file mode 100644 index 0000000000..c50da6666a --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/node/messages/NewAccountingBlockBroadcastMessage.java @@ -0,0 +1,78 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.node.messages; + + +import bisq.core.dao.burningman.accounting.blockchain.AccountingBlock; + +import bisq.network.p2p.storage.messages.BroadcastMessage; + +import bisq.common.app.Version; +import bisq.common.proto.network.NetworkEnvelope; + +import com.google.protobuf.ByteString; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@EqualsAndHashCode(callSuper = true) +@Getter +public final class NewAccountingBlockBroadcastMessage extends BroadcastMessage { + private final AccountingBlock block; + private final String pubKey; + private final byte[] signature; + + public NewAccountingBlockBroadcastMessage(AccountingBlock block, String pubKey, byte[] signature) { + this(block, pubKey, signature, Version.getP2PMessageVersion()); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // PROTO BUFFER + /////////////////////////////////////////////////////////////////////////////////////////// + + private NewAccountingBlockBroadcastMessage(AccountingBlock block, + String pubKey, + byte[] signature, + int messageVersion) { + super(messageVersion); + this.block = block; + this.pubKey = pubKey; + this.signature = signature; + } + + @Override + public protobuf.NetworkEnvelope toProtoNetworkEnvelope() { + return getNetworkEnvelopeBuilder() + .setNewAccountingBlockBroadcastMessage(protobuf.NewAccountingBlockBroadcastMessage.newBuilder() + .setBlock(block.toProtoMessage()) + .setPubKey(pubKey) + .setSignature(ByteString.copyFrom(signature)) + ) + .build(); + } + + public static NetworkEnvelope fromProto(protobuf.NewAccountingBlockBroadcastMessage proto, int messageVersion) { + return new NewAccountingBlockBroadcastMessage(AccountingBlock.fromProto(proto.getBlock()), + proto.getPubKey(), + proto.getSignature().toByteArray(), + messageVersion); + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/storage/BurningManAccountingStore.java b/core/src/main/java/bisq/core/dao/burningman/accounting/storage/BurningManAccountingStore.java new file mode 100644 index 0000000000..cd31b12db9 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/storage/BurningManAccountingStore.java @@ -0,0 +1,57 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.storage; + + +import bisq.core.dao.burningman.accounting.blockchain.AccountingBlock; + +import bisq.common.proto.persistable.PersistableEnvelope; + +import com.google.protobuf.Message; + +import java.util.LinkedList; +import java.util.List; +import java.util.stream.Collectors; + +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Getter +public class BurningManAccountingStore implements PersistableEnvelope { + private final LinkedList blocks = new LinkedList<>(); + + public BurningManAccountingStore(List blocks) { + this.blocks.addAll(blocks); + } + + public Message toProtoMessage() { + return protobuf.PersistableEnvelope.newBuilder() + .setBurningManAccountingStore(protobuf.BurningManAccountingStore.newBuilder() + .addAllBlocks(blocks.stream() + .map(AccountingBlock::toProtoMessage) + .collect(Collectors.toList()))) + .build(); + } + + public static BurningManAccountingStore fromProto(protobuf.BurningManAccountingStore proto) { + return new BurningManAccountingStore(proto.getBlocksList().stream() + .map(AccountingBlock::fromProto) + .collect(Collectors.toList())); + } +} diff --git a/core/src/main/java/bisq/core/proto/network/CoreNetworkProtoResolver.java b/core/src/main/java/bisq/core/proto/network/CoreNetworkProtoResolver.java index 98f4ad3d3e..0169503094 100644 --- a/core/src/main/java/bisq/core/proto/network/CoreNetworkProtoResolver.java +++ b/core/src/main/java/bisq/core/proto/network/CoreNetworkProtoResolver.java @@ -19,6 +19,9 @@ package bisq.core.proto.network; import bisq.core.alert.Alert; import bisq.core.alert.PrivateNotificationMessage; +import bisq.core.dao.burningman.accounting.node.messages.GetAccountingBlocksRequest; +import bisq.core.dao.burningman.accounting.node.messages.GetAccountingBlocksResponse; +import bisq.core.dao.burningman.accounting.node.messages.NewAccountingBlockBroadcastMessage; import bisq.core.dao.governance.blindvote.network.messages.RepublishGovernanceDataRequest; import bisq.core.dao.governance.proposal.storage.temp.TempProposalPayload; import bisq.core.dao.monitoring.network.messages.GetBlindVoteStateHashesRequest; @@ -254,6 +257,13 @@ public class CoreNetworkProtoResolver extends CoreProtoResolver implements Netwo case GET_INVENTORY_RESPONSE: return GetInventoryResponse.fromProto(proto.getGetInventoryResponse(), messageVersion); + case GET_ACCOUNTING_BLOCKS_REQUEST: + return GetAccountingBlocksRequest.fromProto(proto.getGetAccountingBlocksRequest(), messageVersion); + case GET_ACCOUNTING_BLOCKS_RESPONSE: + return GetAccountingBlocksResponse.fromProto(proto.getGetAccountingBlocksResponse(), messageVersion); + case NEW_ACCOUNTING_BLOCK_BROADCAST_MESSAGE: + return NewAccountingBlockBroadcastMessage.fromProto(proto.getNewAccountingBlockBroadcastMessage(), messageVersion); + default: throw new ProtobufferException("Unknown proto message case (PB.NetworkEnvelope). messageCase=" + proto.getMessageCase() + "; proto raw data=" + proto.toString()); diff --git a/core/src/main/java/bisq/core/proto/persistable/CorePersistenceProtoResolver.java b/core/src/main/java/bisq/core/proto/persistable/CorePersistenceProtoResolver.java index bb63cbb065..7e291d6cdc 100644 --- a/core/src/main/java/bisq/core/proto/persistable/CorePersistenceProtoResolver.java +++ b/core/src/main/java/bisq/core/proto/persistable/CorePersistenceProtoResolver.java @@ -21,6 +21,7 @@ import bisq.core.account.sign.SignedWitnessStore; import bisq.core.account.witness.AccountAgeWitnessStore; import bisq.core.btc.model.AddressEntryList; import bisq.core.btc.wallet.BtcWalletService; +import bisq.core.dao.burningman.accounting.storage.BurningManAccountingStore; import bisq.core.dao.governance.blindvote.MyBlindVoteList; import bisq.core.dao.governance.blindvote.storage.BlindVoteStore; import bisq.core.dao.governance.bond.reputation.MyReputationList; @@ -141,6 +142,8 @@ public class CorePersistenceProtoResolver extends CoreProtoResolver implements P return RemovedPayloadsMap.fromProto(proto.getRemovedPayloadsMap()); case BSQ_BLOCK_STORE: return BsqBlockStore.fromProto(proto.getBsqBlockStore()); + case BURNING_MAN_ACCOUNTING_STORE: + return BurningManAccountingStore.fromProto(proto.getBurningManAccountingStore()); default: throw new ProtobufferRuntimeException("Unknown proto message case(PB.PersistableEnvelope). " + "messageCase=" + proto.getMessageCase() + "; proto raw data=" + proto.toString()); diff --git a/proto/src/main/proto/pb.proto b/proto/src/main/proto/pb.proto index 3295491e9c..e6419abd4f 100644 --- a/proto/src/main/proto/pb.proto +++ b/proto/src/main/proto/pb.proto @@ -98,6 +98,10 @@ message NetworkEnvelope { BsqSwapFinalizedTxMessage bsq_swap_finalized_tx_message = 59; FileTransferPart file_transfer_part = 60; + + GetAccountingBlocksRequest get_accounting_blocks_request = 61; + GetAccountingBlocksResponse get_accounting_blocks_response = 62; + NewAccountingBlockBroadcastMessage new_accounting_block_broadcast_message = 63; } } @@ -1492,6 +1496,7 @@ message PersistableEnvelope { IgnoredMailboxMap ignored_mailbox_map = 33; RemovedPayloadsMap removed_payloads_map = 34; BsqBlockStore bsq_block_store = 35; + BurningManAccountingStore burning_man_accounting_store = 36; } } @@ -1999,6 +2004,51 @@ message SubAccountMapEntry { repeated PaymentAccount value = 2; } +// Burningman accounting data +message AccountingTxOutput { + uint32 value = 1; + string name = 2; +} + +message AccountingTx { + uint32 type = 1; + repeated AccountingTxOutput outputs = 2; + bytes truncated_tx_id = 3; +} + +message AccountingBlock { + uint32 height = 1; + uint32 time_in_sec = 2; + bytes truncated_hash = 3; + bytes truncated_previous_block_hash = 4; + repeated AccountingTx txs = 5; +} + +message BurningManAccountingStore { + repeated AccountingBlock blocks = 1; +} + +message GetAccountingBlocksRequest { + int32 from_block_height = 1; + int32 nonce = 2; + NodeAddress sender_node_address = 3; + repeated int32 supported_capabilities = 4; +} + +message GetAccountingBlocksResponse { + repeated AccountingBlock blocks = 1; + int32 request_nonce = 2; + string pub_key = 3; + bytes signature = 4; +} + +message NewAccountingBlockBroadcastMessage { + AccountingBlock block = 1; + string pub_key = 2; + bytes signature = 3; +} + +// DAO message BaseBlock { int32 height = 1; int64 time = 2; From 22c43769bd7f68aa251a8aedcee59be0d713137f Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 21 Nov 2022 19:12:28 -0500 Subject: [PATCH 75/86] Add BurningManAccountingService to CorePersistedDataHost Signed-off-by: HenrikJannsen --- .../BurningManAccountingStoreService.java | 92 +++++++++++++++++++ .../core/setup/CorePersistedDataHost.java | 2 + 2 files changed, 94 insertions(+) create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/storage/BurningManAccountingStoreService.java diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/storage/BurningManAccountingStoreService.java b/core/src/main/java/bisq/core/dao/burningman/accounting/storage/BurningManAccountingStoreService.java new file mode 100644 index 0000000000..ec650d9774 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/storage/BurningManAccountingStoreService.java @@ -0,0 +1,92 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.storage; + +import bisq.core.dao.burningman.accounting.blockchain.AccountingBlock; + +import bisq.common.persistence.PersistenceManager; +import bisq.common.proto.persistable.PersistedDataHost; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Singleton +public class BurningManAccountingStoreService implements PersistedDataHost { + private final PersistenceManager persistenceManager; + private final BurningManAccountingStore burningManAccountingStore = new BurningManAccountingStore(new ArrayList<>()); + + @Inject + public BurningManAccountingStoreService(PersistenceManager persistenceManager) { + this.persistenceManager = persistenceManager; + + this.persistenceManager.initialize(burningManAccountingStore, PersistenceManager.Source.PRIVATE_LOW_PRIO); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // PersistedDataHost implementation + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public void readPersisted(Runnable completeHandler) { + persistenceManager.readPersisted(persisted -> { + burningManAccountingStore.getBlocks().addAll(persisted.getBlocks()); + completeHandler.run(); + }, + completeHandler); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // API + /////////////////////////////////////////////////////////////////////////////////////////// + + public void requestPersistence() { + persistenceManager.requestPersistence(); + } + + public List getBlocks() { + return Collections.unmodifiableList(burningManAccountingStore.getBlocks()); + } + + public void addBlock(AccountingBlock block) { + burningManAccountingStore.getBlocks().add(block); + requestPersistence(); + } + + public void purgeLastTenBlocks() { + List blocks = burningManAccountingStore.getBlocks(); + if (blocks.size() <= 10) { + blocks.clear(); + requestPersistence(); + return; + } + + List purged = new ArrayList<>(blocks.subList(0, blocks.size() - 10)); + blocks.clear(); + blocks.addAll(purged); + requestPersistence(); + } +} diff --git a/core/src/main/java/bisq/core/setup/CorePersistedDataHost.java b/core/src/main/java/bisq/core/setup/CorePersistedDataHost.java index 98e171b426..ee145e3edb 100644 --- a/core/src/main/java/bisq/core/setup/CorePersistedDataHost.java +++ b/core/src/main/java/bisq/core/setup/CorePersistedDataHost.java @@ -18,6 +18,7 @@ package bisq.core.setup; import bisq.core.btc.model.AddressEntryList; +import bisq.core.dao.burningman.accounting.storage.BurningManAccountingStoreService; import bisq.core.dao.governance.ballot.BallotListService; import bisq.core.dao.governance.blindvote.MyBlindVoteListService; import bisq.core.dao.governance.bond.reputation.MyReputationListService; @@ -80,6 +81,7 @@ public class CorePersistedDataHost { persistedDataHosts.add(injector.getInstance(MyReputationListService.class)); persistedDataHosts.add(injector.getInstance(MyProofOfBurnListService.class)); persistedDataHosts.add(injector.getInstance(UnconfirmedBsqChangeOutputListService.class)); + persistedDataHosts.add(injector.getInstance(BurningManAccountingStoreService.class)); return persistedDataHosts; } } From a9bf52d26c8dfb69249a51b19cf1f3e741b74ae5 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 21 Nov 2022 19:12:51 -0500 Subject: [PATCH 76/86] Add BurningMan accounting domain Signed-off-by: HenrikJannsen --- .../src/main/java/bisq/core/dao/DaoSetup.java | 17 +- .../BurningManAccountingService.java | 257 ++++++++++++ .../accounting/balance/BalanceEntry.java | 32 ++ .../accounting/balance/BalanceModel.java | 124 ++++++ .../accounting/balance/BaseBalanceEntry.java | 56 +++ .../balance/BurnedBsqBalanceEntry.java | 31 ++ .../balance/MonthlyBalanceEntry.java | 44 ++ .../balance/MonthlyBurnedBsqBalanceEntry.java | 31 ++ .../balance/ReceivedBtcBalanceEntry.java | 34 ++ .../blockchain/temp/TempAccountingTx.java | 75 ++++ .../temp/TempAccountingTxInput.java | 37 ++ .../temp/TempAccountingTxOutput.java | 37 ++ .../BlockHashNotConnectingException.java | 26 ++ .../BlockHeightNotConnectingException.java | 26 ++ .../accounting/node/AccountingNode.java | 237 +++++++++++ .../node/AccountingNodeProvider.java | 57 +++ .../node/InActiveAccountingNode.java | 60 +++ .../node/full/AccountingBlockParser.java | 210 ++++++++++ .../node/full/AccountingFullNode.java | 323 +++++++++++++++ .../AccountingFullNodeNetworkService.java | 230 ++++++++++ .../GetAccountingBlocksRequestHandler.java | 171 ++++++++ .../node/lite/AccountingLiteNode.java | 310 ++++++++++++++ .../AccountingLiteNodeNetworkService.java | 392 ++++++++++++++++++ .../RequestAccountingBlocksHandler.java | 219 ++++++++++ .../messages/GetAccountingBlocksRequest.java | 1 + .../messages/GetAccountingBlocksResponse.java | 1 + 26 files changed, 3036 insertions(+), 2 deletions(-) create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/BurningManAccountingService.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/balance/BalanceEntry.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/balance/BalanceModel.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/balance/BaseBalanceEntry.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/balance/BurnedBsqBalanceEntry.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/balance/MonthlyBalanceEntry.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/balance/MonthlyBurnedBsqBalanceEntry.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/balance/ReceivedBtcBalanceEntry.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/temp/TempAccountingTx.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/temp/TempAccountingTxInput.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/temp/TempAccountingTxOutput.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/exceptions/BlockHashNotConnectingException.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/exceptions/BlockHeightNotConnectingException.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/node/AccountingNode.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/node/AccountingNodeProvider.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/node/InActiveAccountingNode.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/node/full/AccountingBlockParser.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/node/full/AccountingFullNode.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/node/full/network/AccountingFullNodeNetworkService.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/node/full/network/GetAccountingBlocksRequestHandler.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/node/lite/AccountingLiteNode.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/node/lite/network/AccountingLiteNodeNetworkService.java create mode 100644 core/src/main/java/bisq/core/dao/burningman/accounting/node/lite/network/RequestAccountingBlocksHandler.java diff --git a/core/src/main/java/bisq/core/dao/DaoSetup.java b/core/src/main/java/bisq/core/dao/DaoSetup.java index 728f94108a..98ebdb86d5 100644 --- a/core/src/main/java/bisq/core/dao/DaoSetup.java +++ b/core/src/main/java/bisq/core/dao/DaoSetup.java @@ -17,6 +17,9 @@ package bisq.core.dao; +import bisq.core.dao.burningman.accounting.BurningManAccountingService; +import bisq.core.dao.burningman.accounting.node.AccountingNode; +import bisq.core.dao.burningman.accounting.node.AccountingNodeProvider; import bisq.core.dao.governance.asset.AssetService; import bisq.core.dao.governance.ballot.BallotListService; import bisq.core.dao.governance.blindvote.BlindVoteListService; @@ -54,9 +57,11 @@ import java.util.function.Consumer; public class DaoSetup { private final BsqNode bsqNode; private final List daoSetupServices = new ArrayList<>(); + private final AccountingNode accountingNode; @Inject public DaoSetup(BsqNodeProvider bsqNodeProvider, + AccountingNodeProvider accountingNodeProvider, DaoStateService daoStateService, CycleService cycleService, BallotListService ballotListService, @@ -79,9 +84,11 @@ public class DaoSetup { DaoStateMonitoringService daoStateMonitoringService, ProposalStateMonitoringService proposalStateMonitoringService, BlindVoteStateMonitoringService blindVoteStateMonitoringService, - DaoStateSnapshotService daoStateSnapshotService) { + DaoStateSnapshotService daoStateSnapshotService, + BurningManAccountingService burningManAccountingService) { bsqNode = bsqNodeProvider.getBsqNode(); + accountingNode = accountingNodeProvider.getAccountingNode(); // We need to take care of order of execution. daoSetupServices.add(daoStateService); @@ -107,8 +114,10 @@ public class DaoSetup { daoSetupServices.add(proposalStateMonitoringService); daoSetupServices.add(blindVoteStateMonitoringService); daoSetupServices.add(daoStateSnapshotService); + daoSetupServices.add(burningManAccountingService); - daoSetupServices.add(bsqNodeProvider.getBsqNode()); + daoSetupServices.add(bsqNode); + daoSetupServices.add(accountingNode); } public void onAllServicesInitialized(Consumer errorMessageHandler, @@ -116,6 +125,9 @@ public class DaoSetup { bsqNode.setErrorMessageHandler(errorMessageHandler); bsqNode.setWarnMessageHandler(warnMessageHandler); + accountingNode.setErrorMessageHandler(errorMessageHandler); + accountingNode.setWarnMessageHandler(warnMessageHandler); + // We add first all listeners at all services and then call the start methods. // Some services are listening on others so we need to make sure that the // listeners are set before we call start as that might trigger state change @@ -126,5 +138,6 @@ public class DaoSetup { public void shutDown() { bsqNode.shutDown(); + accountingNode.shutDown(); } } diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/BurningManAccountingService.java b/core/src/main/java/bisq/core/dao/burningman/accounting/BurningManAccountingService.java new file mode 100644 index 0000000000..46b61a5092 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/BurningManAccountingService.java @@ -0,0 +1,257 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting; + +import bisq.core.dao.DaoSetupService; +import bisq.core.dao.burningman.BurningManPresentationService; +import bisq.core.dao.burningman.accounting.balance.BalanceEntry; +import bisq.core.dao.burningman.accounting.balance.BalanceModel; +import bisq.core.dao.burningman.accounting.balance.ReceivedBtcBalanceEntry; +import bisq.core.dao.burningman.accounting.blockchain.AccountingBlock; +import bisq.core.dao.burningman.accounting.blockchain.AccountingTx; +import bisq.core.dao.burningman.accounting.exceptions.BlockHashNotConnectingException; +import bisq.core.dao.burningman.accounting.exceptions.BlockHeightNotConnectingException; +import bisq.core.dao.burningman.accounting.storage.BurningManAccountingStoreService; +import bisq.core.monetary.Price; +import bisq.core.trade.statistics.TradeStatisticsManager; +import bisq.core.user.Preferences; +import bisq.core.util.AveragePriceUtil; + +import bisq.common.UserThread; +import bisq.common.config.Config; +import bisq.common.util.DateUtil; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import java.util.Arrays; +import java.util.Calendar; +import java.util.Comparator; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import java.util.stream.Collectors; + +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +/** + * Provides APIs for the accounting related aspects of burningmen. + * Combines the received funds from BTC trade fees and DPT payouts and the burned BSQ. + */ +@Slf4j +@Singleton +public class BurningManAccountingService implements DaoSetupService { + // now 763195 -> 107159 blocks takes about 14h + // First tx at BM address 656036 Sun Nov 08 19:02:18 EST 2020 + // 2 months ago 754555 + public static final int EARLIEST_BLOCK_HEIGHT = Config.baseCurrencyNetwork().isRegtest() ? 111 : 656035; + public static final int EARLIEST_DATE_YEAR = 2020; + public static final int EARLIEST_DATE_MONTH = 10; + + private final BurningManAccountingStoreService burningManAccountingStoreService; + private final BurningManPresentationService burningManPresentationService; + private final TradeStatisticsManager tradeStatisticsManager; + private final Preferences preferences; + + @Getter + private final Map averageBsqPriceByMonth = new HashMap<>(getHistoricalAverageBsqPriceByMonth()); + @Getter + private final Map balanceModelByBurningManName = new HashMap<>(); + + @Inject + public BurningManAccountingService(BurningManAccountingStoreService burningManAccountingStoreService, + BurningManPresentationService burningManPresentationService, + TradeStatisticsManager tradeStatisticsManager, + Preferences preferences) { + this.burningManAccountingStoreService = burningManAccountingStoreService; + this.burningManPresentationService = burningManPresentationService; + this.tradeStatisticsManager = tradeStatisticsManager; + this.preferences = preferences; + + } + + /////////////////////////////////////////////////////////////////////////////////////////// + // DaoSetupService + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public void addListeners() { + } + + @Override + public void start() { + // Create the map from now back to the last entry of the historical data (April 2019-Nov. 2022). + averageBsqPriceByMonth.putAll(getAverageBsqPriceByMonth(new Date(), 2022, 10)); + + updateBalanceModelByAddress(); + CompletableFuture.runAsync(() -> { + Map map = new HashMap<>(); + // addAccountingBlockToBalanceModel takes about 500ms for 100k items, so we run it in a non UI thread. + getBlocks().forEach(block -> addAccountingBlockToBalanceModel(map, block)); + UserThread.execute(() -> balanceModelByBurningManName.putAll(map)); + }); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // API + /////////////////////////////////////////////////////////////////////////////////////////// + + public void onInitialBlockRequestsComplete() { + updateBalanceModelByAddress(); + getBlocks().forEach(this::addAccountingBlockToBalanceModel); + } + + public void onNewBlockReceived(AccountingBlock accountingBlock) { + updateBalanceModelByAddress(); + addAccountingBlockToBalanceModel(accountingBlock); + } + + public void addBlock(AccountingBlock block) throws BlockHashNotConnectingException, BlockHeightNotConnectingException { + if (!getBlocks().contains(block)) { + Optional optionalLastBlock = getLastBlock(); + if (optionalLastBlock.isPresent()) { + AccountingBlock lastBlock = optionalLastBlock.get(); + if (block.getHeight() != lastBlock.getHeight() + 1) { + throw new BlockHeightNotConnectingException(); + } + if (!Arrays.equals(block.getTruncatedPreviousBlockHash(), lastBlock.getTruncatedHash())) { + throw new BlockHashNotConnectingException(); + } + } else if (block.getHeight() != EARLIEST_BLOCK_HEIGHT) { + throw new BlockHeightNotConnectingException(); + } + log.info("Add new accountingBlock at height {} at {} with {} txs", block.getHeight(), + new Date(block.getDate()), block.getTxs().size()); + burningManAccountingStoreService.addBlock(block); + } else { + log.info("We have that block already. Height: {}", block.getHeight()); + } + } + + public int getBlockHeightOfLastBlock() { + return getLastBlock().map(AccountingBlock::getHeight).orElse(BurningManAccountingService.EARLIEST_BLOCK_HEIGHT - 1); + } + + public Optional getLastBlock() { + return getBlocks().stream().max(Comparator.comparing(AccountingBlock::getHeight)); + } + + public Optional getBlockAtHeight(int height) { + return getBlocks().stream().filter(block -> block.getHeight() == height).findAny(); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Delegates + /////////////////////////////////////////////////////////////////////////////////////////// + + public List getBlocks() { + return burningManAccountingStoreService.getBlocks(); + } + + public Map getBurningManNameByAddress() { + return burningManPresentationService.getBurningManNameByAddress(); + } + + public String getGenesisTxId() { + return burningManPresentationService.getGenesisTxId(); + } + + public void purgeLastTenBlocks() { + burningManAccountingStoreService.purgeLastTenBlocks(); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Private + /////////////////////////////////////////////////////////////////////////////////////////// + + private void updateBalanceModelByAddress() { + burningManPresentationService.getBurningManCandidatesByName().keySet() + .forEach(key -> balanceModelByBurningManName.putIfAbsent(key, new BalanceModel())); + } + + private void addAccountingBlockToBalanceModel(AccountingBlock accountingBlock) { + addAccountingBlockToBalanceModel(balanceModelByBurningManName, accountingBlock); + } + + private void addAccountingBlockToBalanceModel(Map balanceModelByBurningManName, + AccountingBlock accountingBlock) { + accountingBlock.getTxs().forEach(tx -> { + tx.getOutputs().forEach(txOutput -> { + String name = txOutput.getName(); + balanceModelByBurningManName.putIfAbsent(name, new BalanceModel()); + balanceModelByBurningManName.get(name).addReceivedBtcBalanceEntry(new ReceivedBtcBalanceEntry(tx.getTruncatedTxId(), + txOutput.getValue(), + new Date(accountingBlock.getDate()), + toBalanceEntryType(tx.getType()))); + }); + }); + } + + private Map getAverageBsqPriceByMonth(Date from, int toYear, int toMonth) { + Map averageBsqPriceByMonth = new HashMap<>(); + Calendar calendar = new GregorianCalendar(); + calendar.setTime(from); + int year = calendar.get(Calendar.YEAR); + int month = calendar.get(Calendar.MONTH); + do { + for (; month >= 0; month--) { + if (year == toYear && month == toMonth) { + break; + } + Date date = DateUtil.getStartOfMonth(year, month); + Price averageBsqPrice = AveragePriceUtil.getAveragePriceTuple(preferences, tradeStatisticsManager, 30, date).second; + averageBsqPriceByMonth.put(date, averageBsqPrice); + } + year--; + month = 11; + } while (year >= toYear); + return averageBsqPriceByMonth; + } + + private static BalanceEntry.Type toBalanceEntryType(AccountingTx.Type type) { + return type == AccountingTx.Type.BTC_TRADE_FEE_TX ? + BalanceEntry.Type.BTC_TRADE_FEE_TX : + BalanceEntry.Type.DPT_TX; + } + + @SuppressWarnings("CommentedOutCode") + private static Map getHistoricalAverageBsqPriceByMonth() { + // We use the average 30 day BSQ price from the first day of a month back 30 days. So for 1.Nov 2022 we take the average during October 2022. + // Filling the map takes a bit of computation time (about 5 sec), so we use for historical data a pre-calculated list. + // Average price from 1. May 2019 (April average) - 1. Nov 2022 (Oct average) + String historical = "1648789200000=2735, 1630472400000=3376, 1612155600000=6235, 1559365200000=13139, 1659330000000=3609, 1633064400000=3196, 1583038800000=7578, 1622523600000=3918, 1625115600000=3791, 1667278800000=3794, 1561957200000=10882, 1593579600000=6153, 1577854800000=9034, 1596258000000=6514, 1604206800000=5642, 1643691600000=3021, 1606798800000=4946, 1569906000000=10445, 1567314000000=9885, 1614574800000=5052, 1656651600000=3311, 1638334800000=3015, 1564635600000=8788, 1635742800000=3065, 1654059600000=3207, 1646110800000=2824, 1609477200000=4199, 1664600400000=3820, 1662008400000=3756, 1556686800000=24094, 1588309200000=7986, 1585717200000=7994, 1627794000000=3465, 1580533200000=5094, 1590987600000=7411, 1619845200000=3956, 1617253200000=4024, 1575176400000=9571, 1572584400000=9058, 1641013200000=3052, 1601528400000=5648, 1651381200000=2908, 1598936400000=6032"; + + // Create historical data as string + /* log.info("averageBsqPriceByMonth=" + getAverageBsqPriceByMonth(new Date(), 2019, 3).entrySet().stream() + .map(e -> e.getKey().getTime() + "=" + e.getValue().getValue()) + .collect(Collectors.toList())); + */ + return Arrays.stream(historical.split(", ")) + .map(chunk -> chunk.split("=")) + .collect(Collectors.toMap(tuple -> new Date(Long.parseLong(tuple[0])), + tuple -> Price.valueOf("BSQ", Long.parseLong(tuple[1])))); + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/balance/BalanceEntry.java b/core/src/main/java/bisq/core/dao/burningman/accounting/balance/BalanceEntry.java new file mode 100644 index 0000000000..5786efde9a --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/balance/BalanceEntry.java @@ -0,0 +1,32 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.balance; + +import java.util.Date; + +public interface BalanceEntry { + Date getDate(); + + Date getMonth(); + + enum Type { + BTC_TRADE_FEE_TX, + DPT_TX, + BURN_TX + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/balance/BalanceModel.java b/core/src/main/java/bisq/core/dao/burningman/accounting/balance/BalanceModel.java new file mode 100644 index 0000000000..e85fec5b64 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/balance/BalanceModel.java @@ -0,0 +1,124 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.balance; + +import bisq.core.dao.burningman.model.BurnOutputModel; +import bisq.core.dao.burningman.model.BurningManCandidate; + +import bisq.common.util.DateUtil; + +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.function.Predicate; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import lombok.EqualsAndHashCode; +import lombok.extern.slf4j.Slf4j; + +import static bisq.core.dao.burningman.accounting.BurningManAccountingService.EARLIEST_DATE_MONTH; +import static bisq.core.dao.burningman.accounting.BurningManAccountingService.EARLIEST_DATE_YEAR; + +@Slf4j +@EqualsAndHashCode +public class BalanceModel { + private final Set receivedBtcBalanceEntries = new HashSet<>(); + private final Map> receivedBtcBalanceEntriesByMonth = new HashMap<>(); + + public BalanceModel() { + } + + public void addReceivedBtcBalanceEntry(ReceivedBtcBalanceEntry balanceEntry) { + receivedBtcBalanceEntries.add(balanceEntry); + + Date month = balanceEntry.getMonth(); + receivedBtcBalanceEntriesByMonth.putIfAbsent(month, new HashSet<>()); + receivedBtcBalanceEntriesByMonth.get(month).add(balanceEntry); + } + + public Set getReceivedBtcBalanceEntries() { + return receivedBtcBalanceEntries; + } + + public Stream getBurnedBsqBalanceEntries(Set burnOutputModels) { + return burnOutputModels.stream() + .map(burnOutputModel -> new BurnedBsqBalanceEntry(burnOutputModel.getTxId(), + burnOutputModel.getAmount(), + new Date(burnOutputModel.getDate()))); + } + + public List getMonthlyBalanceEntries(BurningManCandidate burningManCandidate, + Predicate predicate) { + Map> burnOutputModelsByMonth = burningManCandidate.getBurnOutputModelsByMonth(); + Set months = getMonths(new Date(), EARLIEST_DATE_YEAR, EARLIEST_DATE_MONTH); + return months.stream() + .map(date -> { + long sumBurnedBsq = 0; + Set types = new HashSet<>(); + if (burnOutputModelsByMonth.containsKey(date)) { + Set burnOutputModels = burnOutputModelsByMonth.get(date); + Set monthlyBurnedBsqBalanceEntries = burnOutputModels.stream() + .map(burnOutputModel -> new MonthlyBurnedBsqBalanceEntry(burnOutputModel.getTxId(), + burnOutputModel.getAmount(), + date)) + .collect(Collectors.toSet()); + sumBurnedBsq = monthlyBurnedBsqBalanceEntries.stream() + .filter(predicate) + .peek(e -> types.add(e.getType())) + .mapToLong(MonthlyBurnedBsqBalanceEntry::getAmount) + .sum(); + } + long sumReceivedBtc = 0; + if (receivedBtcBalanceEntriesByMonth.containsKey(date)) { + sumReceivedBtc = receivedBtcBalanceEntriesByMonth.get(date).stream() + .filter(predicate) + .peek(e -> types.add(e.getType())) + .mapToLong(BaseBalanceEntry::getAmount) + .sum(); + } + return new MonthlyBalanceEntry(sumReceivedBtc, sumBurnedBsq, date, types); + }) + .filter(balanceEntry -> balanceEntry.getBurnedBsq() > 0 || balanceEntry.getReceivedBtc() > 0) + .collect(Collectors.toList()); + } + + private Set getMonths(Date from, int toYear, int toMonth) { + Set map = new HashSet<>(); + Calendar calendar = new GregorianCalendar(); + calendar.setTime(from); + int year = calendar.get(Calendar.YEAR); + int month = calendar.get(Calendar.MONTH); + do { + for (; month >= 0; month--) { + if (year == toYear && month == toMonth) { + break; + } + map.add(DateUtil.getStartOfMonth(year, month)); + } + year--; + month = 11; + } while (year >= toYear); + return map; + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/balance/BaseBalanceEntry.java b/core/src/main/java/bisq/core/dao/burningman/accounting/balance/BaseBalanceEntry.java new file mode 100644 index 0000000000..19de0b8100 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/balance/BaseBalanceEntry.java @@ -0,0 +1,56 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.balance; + +import bisq.common.util.DateUtil; + +import java.util.Date; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@EqualsAndHashCode +@Getter +public abstract class BaseBalanceEntry implements BalanceEntry { + private final String txId; + private final long amount; + private final Date date; + private final Date month; + private final Type type; + + protected BaseBalanceEntry(String txId, long amount, Date date, Type type) { + this.txId = txId; + this.amount = amount; + this.date = date; + month = DateUtil.getStartOfMonth(date); + this.type = type; + } + + @Override + public String toString() { + return "BaseBalanceEntry{" + + "\r\n txId=" + txId + + "\r\n amount=" + amount + + ",\r\n date=" + date + + ",\r\n month=" + month + + ",\r\n type=" + type + + "\r\n}"; + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/balance/BurnedBsqBalanceEntry.java b/core/src/main/java/bisq/core/dao/burningman/accounting/balance/BurnedBsqBalanceEntry.java new file mode 100644 index 0000000000..e1c166405b --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/balance/BurnedBsqBalanceEntry.java @@ -0,0 +1,31 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.balance; + +import java.util.Date; + +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@EqualsAndHashCode(callSuper = true) +@Getter +public class BurnedBsqBalanceEntry extends BaseBalanceEntry { + public BurnedBsqBalanceEntry(String txId, long amount, Date date) { + super(txId, amount, date, Type.BURN_TX); + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/balance/MonthlyBalanceEntry.java b/core/src/main/java/bisq/core/dao/burningman/accounting/balance/MonthlyBalanceEntry.java new file mode 100644 index 0000000000..130641a7ce --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/balance/MonthlyBalanceEntry.java @@ -0,0 +1,44 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.balance; + +import bisq.common.util.DateUtil; + +import java.util.Date; +import java.util.Set; + +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@EqualsAndHashCode +@Getter +public class MonthlyBalanceEntry implements BalanceEntry { + private final long receivedBtc; + private final long burnedBsq; + private final Date date; + private final Date month; + private final Set types; + + public MonthlyBalanceEntry(long receivedBtc, long burnedBsq, Date date, Set types) { + this.receivedBtc = receivedBtc; + this.burnedBsq = burnedBsq; + this.date = date; + month = DateUtil.getStartOfMonth(date); + this.types = types; + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/balance/MonthlyBurnedBsqBalanceEntry.java b/core/src/main/java/bisq/core/dao/burningman/accounting/balance/MonthlyBurnedBsqBalanceEntry.java new file mode 100644 index 0000000000..8d404bf1d3 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/balance/MonthlyBurnedBsqBalanceEntry.java @@ -0,0 +1,31 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.balance; + +import java.util.Date; + +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@EqualsAndHashCode(callSuper = true) +@Getter +public class MonthlyBurnedBsqBalanceEntry extends BurnedBsqBalanceEntry { + public MonthlyBurnedBsqBalanceEntry(String txId, long amount, Date date) { + super(txId, amount, date); + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/balance/ReceivedBtcBalanceEntry.java b/core/src/main/java/bisq/core/dao/burningman/accounting/balance/ReceivedBtcBalanceEntry.java new file mode 100644 index 0000000000..78e27e74f0 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/balance/ReceivedBtcBalanceEntry.java @@ -0,0 +1,34 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.balance; + +import bisq.common.util.Hex; + +import java.util.Date; + +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@EqualsAndHashCode(callSuper = true) +@Getter +public class ReceivedBtcBalanceEntry extends BaseBalanceEntry { + // We store only last 4 bytes in the AccountTx which is used to create a ReceivedBtcBalanceEntry instance. + public ReceivedBtcBalanceEntry(byte[] truncatedTxId, long amount, Date date, BalanceEntry.Type type) { + super(Hex.encode(truncatedTxId), amount, date, type); + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/temp/TempAccountingTx.java b/core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/temp/TempAccountingTx.java new file mode 100644 index 0000000000..b2ab9ddbbe --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/temp/TempAccountingTx.java @@ -0,0 +1,75 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.blockchain.temp; + +import bisq.core.dao.node.full.rpc.dto.DtoPubKeyScript; +import bisq.core.dao.node.full.rpc.dto.RawDtoTransaction; +import bisq.core.dao.state.model.blockchain.ScriptType; + +import java.math.BigDecimal; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@EqualsAndHashCode +@Getter +public final class TempAccountingTx { + private final String txId; + private final boolean isValidDptLockTime; + private final List inputs; + private final List outputs; + + public TempAccountingTx(RawDtoTransaction tx) { + txId = tx.getTxId(); + + // If lockTime is < 500000000 it is interpreted as block height, otherwise as unix time. We use block height. + // We only handle blocks from EARLIEST_BLOCK_HEIGHT on + //todo for dev testing + isValidDptLockTime = /*tx.getLockTime() >= BurningManAccountingService.EARLIEST_BLOCK_HEIGHT &&*/ tx.getLockTime() < 500000000; + + inputs = tx.getVIn().stream() + .map(input -> { + List txInWitness = input.getTxInWitness() != null ? input.getTxInWitness() : new ArrayList<>(); + return new TempAccountingTxInput(input.getSequence(), txInWitness); + }) + .collect(Collectors.toList()); + + outputs = tx.getVOut().stream() + .map(output -> { + long value = BigDecimal.valueOf(output.getValue()).movePointRight(8).longValueExact(); + // We use a non-null field for address as in the final object we require that the address is available + String address = ""; + DtoPubKeyScript scriptPubKey = output.getScriptPubKey(); + if (scriptPubKey != null) { + List addresses = scriptPubKey.getAddresses(); + if (addresses != null && addresses.size() == 1) { + address = addresses.get(0); + } + } + ScriptType scriptType = output.getScriptPubKey() != null ? output.getScriptPubKey().getType() : null; + return new TempAccountingTxOutput(value, address, scriptType); + }) + .collect(Collectors.toList()); + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/temp/TempAccountingTxInput.java b/core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/temp/TempAccountingTxInput.java new file mode 100644 index 0000000000..ea0cd2907d --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/temp/TempAccountingTxInput.java @@ -0,0 +1,37 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.blockchain.temp; + +import java.util.List; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@EqualsAndHashCode +@Getter +public final class TempAccountingTxInput { + private final long sequence; + private final List txInWitness; + + public TempAccountingTxInput(long sequence, List txInWitness) { + this.sequence = sequence; + this.txInWitness = txInWitness; + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/temp/TempAccountingTxOutput.java b/core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/temp/TempAccountingTxOutput.java new file mode 100644 index 0000000000..55fbbc1cc1 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/blockchain/temp/TempAccountingTxOutput.java @@ -0,0 +1,37 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.blockchain.temp; + +import bisq.core.dao.state.model.blockchain.ScriptType; + +import lombok.EqualsAndHashCode; +import lombok.Getter; + +@EqualsAndHashCode +@Getter +public final class TempAccountingTxOutput { + private final long value; + private final String address; + private final ScriptType scriptType; + + public TempAccountingTxOutput(long value, String address, ScriptType scriptType) { + this.value = value; + this.address = address; + this.scriptType = scriptType; + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/exceptions/BlockHashNotConnectingException.java b/core/src/main/java/bisq/core/dao/burningman/accounting/exceptions/BlockHashNotConnectingException.java new file mode 100644 index 0000000000..a3e84b4c79 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/exceptions/BlockHashNotConnectingException.java @@ -0,0 +1,26 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.exceptions; + +import lombok.Getter; + +@Getter +public class BlockHashNotConnectingException extends Exception { + public BlockHashNotConnectingException() { + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/exceptions/BlockHeightNotConnectingException.java b/core/src/main/java/bisq/core/dao/burningman/accounting/exceptions/BlockHeightNotConnectingException.java new file mode 100644 index 0000000000..042b50839a --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/exceptions/BlockHeightNotConnectingException.java @@ -0,0 +1,26 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.exceptions; + +import lombok.Getter; + +@Getter +public class BlockHeightNotConnectingException extends Exception { + public BlockHeightNotConnectingException() { + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/node/AccountingNode.java b/core/src/main/java/bisq/core/dao/burningman/accounting/node/AccountingNode.java new file mode 100644 index 0000000000..4572938e45 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/node/AccountingNode.java @@ -0,0 +1,237 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.node; + +import bisq.core.dao.DaoSetupService; +import bisq.core.dao.burningman.accounting.BurningManAccountingService; +import bisq.core.dao.burningman.accounting.blockchain.AccountingBlock; +import bisq.core.dao.burningman.accounting.node.full.AccountingBlockParser; +import bisq.core.dao.state.DaoStateListener; +import bisq.core.dao.state.DaoStateService; + +import bisq.network.p2p.BootstrapListener; +import bisq.network.p2p.P2PService; + +import bisq.common.UserThread; +import bisq.common.app.DevEnv; + +import org.bitcoinj.core.ECKey; +import org.bitcoinj.core.Sha256Hash; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import java.util.Collection; +import java.util.Set; +import java.util.function.Consumer; + +import lombok.extern.slf4j.Slf4j; + +import javax.annotation.Nullable; + +import static org.bitcoinj.core.Utils.HEX; + +@Slf4j +public abstract class AccountingNode implements DaoSetupService, DaoStateListener { + public static final Set PERMITTED_PUB_KEYS = Set.of("034527b1c2b644283c19c180efbcc9ba51258fbe5c5ce0c95b522f1c9b07896e48", + "02a06121632518eef4400419a3aaf944534e8cf357138dd82bba3ad78ce5902f27", + "029ff0da89aa03507dfe0529eb74a53bc65fbee7663ceba04f014b0ee4520973b5", + "0205c992604969bc70914fc89a6daa43cd5157ac886224a8c0901dd1dc6dd1df45", + "023e699281b3ee41f35991f064a5c12cb1b61286dda22c8220b3f707aa21235efb"); + + /////////////////////////////////////////////////////////////////////////////////////////// + // Oracle verification + /////////////////////////////////////////////////////////////////////////////////////////// + + public static Sha256Hash getSha256Hash(AccountingBlock block) { + return Sha256Hash.of(block.toProtoMessage().toByteArray()); + } + + @Nullable + public static Sha256Hash getSha256Hash(Collection blocks) { + try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { + for (AccountingBlock accountingBlock : blocks) { + outputStream.write(accountingBlock.toProtoMessage().toByteArray()); + } + return Sha256Hash.of(outputStream.toByteArray()); + } catch (IOException e) { + return null; + } + } + + public static byte[] getSignature(Sha256Hash sha256Hash, ECKey privKey) { + ECKey.ECDSASignature ecdsaSignature = privKey.sign(sha256Hash); + return ecdsaSignature.encodeToDER(); + } + + public static boolean isValidPubKeyAndSignature(Sha256Hash sha256Hash, + String pubKey, + byte[] signature, + boolean useDevPrivilegeKeys) { + if (!getPermittedPubKeys(useDevPrivilegeKeys).contains(pubKey)) { + log.warn("PubKey is not in supported key set. pubKey={}", pubKey); + return false; + } + + try { + ECKey.ECDSASignature ecdsaSignature = ECKey.ECDSASignature.decodeFromDER(signature); + ECKey ecPubKey = ECKey.fromPublicOnly(HEX.decode(pubKey)); + return ecPubKey.verify(sha256Hash, ecdsaSignature); + } catch (Throwable e) { + log.warn("Signature verification failed."); + return false; + } + } + + public static boolean isPermittedPubKey(boolean useDevPrivilegeKeys, String pubKey) { + return getPermittedPubKeys(useDevPrivilegeKeys).contains(pubKey); + } + + private static Set getPermittedPubKeys(boolean useDevPrivilegeKeys) { + return useDevPrivilegeKeys ? Set.of(DevEnv.DEV_PRIVILEGE_PUB_KEY) : PERMITTED_PUB_KEYS; + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Class fields + /////////////////////////////////////////////////////////////////////////////////////////// + + protected final P2PService p2PService; + private final DaoStateService daoStateService; + protected final BurningManAccountingService burningManAccountingService; + protected final AccountingBlockParser accountingBlockParser; + + @Nullable + protected Consumer errorMessageHandler; + @Nullable + protected Consumer warnMessageHandler; + protected BootstrapListener bootstrapListener; + protected int tryReorgCounter; + protected boolean p2pNetworkReady; + protected boolean initialBlockRequestsComplete; + + public AccountingNode(P2PService p2PService, + DaoStateService daoStateService, + BurningManAccountingService burningManAccountingService, + AccountingBlockParser accountingBlockParser) { + this.p2PService = p2PService; + this.daoStateService = daoStateService; + this.burningManAccountingService = burningManAccountingService; + this.accountingBlockParser = accountingBlockParser; + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // DaoStateListener + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public void onParseBlockChainComplete() { + onInitialDaoBlockParsingComplete(); + + // We get called onParseBlockChainComplete at each new block arriving but we want to react only after initial + // parsing is done, so we remove after getting called ourself as listener. + daoStateService.removeDaoStateListener(this); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // DaoSetupService + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public void addListeners() { + if (daoStateService.isParseBlockChainComplete()) { + log.info("daoStateService.isParseBlockChainComplete is already true, " + + "we call onInitialDaoBlockParsingComplete directly"); + onInitialDaoBlockParsingComplete(); + } else { + daoStateService.addDaoStateListener(this); + } + + bootstrapListener = new BootstrapListener() { + @Override + public void onNoSeedNodeAvailable() { + onP2PNetworkReady(); + } + + @Override + public void onUpdatedDataReceived() { + onP2PNetworkReady(); + } + }; + } + + @Override + public abstract void start(); + + + /////////////////////////////////////////////////////////////////////////////////////////// + // API + /////////////////////////////////////////////////////////////////////////////////////////// + + public void setErrorMessageHandler(@SuppressWarnings("NullableProblems") Consumer errorMessageHandler) { + this.errorMessageHandler = errorMessageHandler; + } + + public void setWarnMessageHandler(@SuppressWarnings("NullableProblems") Consumer warnMessageHandler) { + this.warnMessageHandler = warnMessageHandler; + } + + public abstract void shutDown(); + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Protected + /////////////////////////////////////////////////////////////////////////////////////////// + + protected abstract void onInitialDaoBlockParsingComplete(); + + protected void onInitialized() { + if (p2PService.isBootstrapped()) { + log.info("p2PService.isBootstrapped is already true, we call onP2PNetworkReady directly."); + onP2PNetworkReady(); + } else { + p2PService.addP2PServiceListener(bootstrapListener); + } + } + + protected void onP2PNetworkReady() { + p2pNetworkReady = true; + p2PService.removeP2PServiceListener(bootstrapListener); + } + + protected abstract void startRequestBlocks(); + + protected void onInitialBlockRequestsComplete() { + initialBlockRequestsComplete = true; + burningManAccountingService.onInitialBlockRequestsComplete(); + } + + protected void applyReOrg() { + log.warn("applyReOrg called"); + tryReorgCounter++; + if (tryReorgCounter < 5) { + burningManAccountingService.purgeLastTenBlocks(); + // Increase delay at each retry + UserThread.runAfter(this::startRequestBlocks, (long) tryReorgCounter * tryReorgCounter); + } else { + log.warn("We tried {} times to request blocks again after a reorg signal but it is still failing.", tryReorgCounter); + } + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/node/AccountingNodeProvider.java b/core/src/main/java/bisq/core/dao/burningman/accounting/node/AccountingNodeProvider.java new file mode 100644 index 0000000000..0022aa7b77 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/node/AccountingNodeProvider.java @@ -0,0 +1,57 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.node; + +import bisq.core.dao.burningman.BurningManService; +import bisq.core.dao.burningman.accounting.node.full.AccountingFullNode; +import bisq.core.dao.burningman.accounting.node.lite.AccountingLiteNode; +import bisq.core.user.Preferences; + +import bisq.common.config.Config; + +import com.google.inject.Inject; + +import javax.inject.Named; + +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class AccountingNodeProvider { + @Getter + private final AccountingNode accountingNode; + + @Inject + public AccountingNodeProvider(AccountingLiteNode liteNode, + AccountingFullNode fullNode, + InActiveAccountingNode inActiveAccountingNode, + @Named(Config.IS_BM_FULL_NODE) boolean isBmFullNode, + Preferences preferences) { + + boolean rpcDataSet = preferences.getRpcUser() != null && + !preferences.getRpcUser().isEmpty() + && preferences.getRpcPw() != null && + !preferences.getRpcPw().isEmpty() && + preferences.getBlockNotifyPort() > 0; + if (BurningManService.isActivated()) { + accountingNode = isBmFullNode && rpcDataSet ? fullNode : liteNode; + } else { + accountingNode = inActiveAccountingNode; + } + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/node/InActiveAccountingNode.java b/core/src/main/java/bisq/core/dao/burningman/accounting/node/InActiveAccountingNode.java new file mode 100644 index 0000000000..a5c2604b34 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/node/InActiveAccountingNode.java @@ -0,0 +1,60 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.node; + +import bisq.core.dao.burningman.accounting.BurningManAccountingService; +import bisq.core.dao.burningman.accounting.node.full.AccountingBlockParser; +import bisq.core.dao.state.DaoStateService; + +import bisq.network.p2p.P2PService; + +import com.google.inject.Inject; + +import javax.inject.Singleton; + +// Dummy implementation for a do-nothing AccountingNode. Used for the time before the burningman domain gets activated. +@Singleton +class InActiveAccountingNode extends AccountingNode { + @Inject + public InActiveAccountingNode(P2PService p2PService, + DaoStateService daoStateService, + BurningManAccountingService burningManAccountingService, + AccountingBlockParser accountingBlockParser) { + super(p2PService, daoStateService, burningManAccountingService, accountingBlockParser); + } + + @Override + public void addListeners() { + } + + @Override + public void start() { + } + + @Override + public void shutDown() { + } + + @Override + protected void onInitialDaoBlockParsingComplete() { + } + + @Override + protected void startRequestBlocks() { + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/node/full/AccountingBlockParser.java b/core/src/main/java/bisq/core/dao/burningman/accounting/node/full/AccountingBlockParser.java new file mode 100644 index 0000000000..6fba586b16 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/node/full/AccountingBlockParser.java @@ -0,0 +1,210 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.node.full; + +import bisq.core.dao.burningman.accounting.BurningManAccountingService; +import bisq.core.dao.burningman.accounting.blockchain.AccountingBlock; +import bisq.core.dao.burningman.accounting.blockchain.AccountingTx; +import bisq.core.dao.burningman.accounting.blockchain.AccountingTxOutput; +import bisq.core.dao.burningman.accounting.blockchain.temp.TempAccountingTx; +import bisq.core.dao.burningman.accounting.blockchain.temp.TempAccountingTxInput; +import bisq.core.dao.burningman.accounting.blockchain.temp.TempAccountingTxOutput; +import bisq.core.dao.node.full.rpc.dto.RawDtoBlock; +import bisq.core.dao.state.model.blockchain.ScriptType; + +import bisq.common.util.Hex; + +import org.bitcoinj.core.Coin; +import org.bitcoinj.core.TransactionInput; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Singleton +public class AccountingBlockParser { + private final BurningManAccountingService burningManAccountingService; + + @Inject + public AccountingBlockParser(BurningManAccountingService burningManAccountingService) { + this.burningManAccountingService = burningManAccountingService; + } + + public AccountingBlock parse(RawDtoBlock rawDtoBlock) { + Map burningManNameByAddress = burningManAccountingService.getBurningManNameByAddress(); + String genesisTxId = burningManAccountingService.getGenesisTxId(); + + // We filter early for first output address match. DPT txs have multiple outputs which need to match and will be checked later. + Set receiverAddresses = burningManNameByAddress.keySet(); + List txs = rawDtoBlock.getTx().stream() + .map(TempAccountingTx::new) + .filter(tempAccountingTx -> receiverAddresses.contains(tempAccountingTx.getOutputs().get(0).getAddress())) + .map(tempAccountingTx -> toAccountingTx(tempAccountingTx, burningManNameByAddress, genesisTxId)) + .filter(Optional::isPresent) + .map(Optional::get) + .collect(Collectors.toList()); + // Time in rawDtoBlock is in seconds + int timeInSec = rawDtoBlock.getTime().intValue(); + byte[] truncatedHash = Hex.decodeLast4Bytes(rawDtoBlock.getHash()); + byte[] truncatedPreviousBlockHash = Hex.decodeLast4Bytes(rawDtoBlock.getPreviousBlockHash()); + return new AccountingBlock(rawDtoBlock.getHeight(), + timeInSec, + truncatedHash, + truncatedPreviousBlockHash, + txs); + } + + // We cannot know for sure if it's a DPT or BTC fee tx as we do not have the spending tx output with more + // data for verification as we do not keep the full blockchain data for lookup unspent tx outputs. + // The DPT can be very narrowly detected. The BTC fee txs might have false positives. + private Optional toAccountingTx(TempAccountingTx tempAccountingTx, + Map burningManNameByAddress, + String genesisTxId) { + if (genesisTxId.equals(tempAccountingTx.getTxId())) { + return Optional.empty(); + } + + Set receiverAddresses = burningManNameByAddress.keySet(); + // DPT has 1 input from P2WSH with lock time and sequence number set. + // We only use native segwit P2SH, so we expect a txInWitness + List inputs = tempAccountingTx.getInputs(); + List outputs = tempAccountingTx.getOutputs(); + // Max DPT output amount is currently 4 BTC. Max. security deposit is 50% of trade amount. + // We give some extra headroom to cover potential future changes. + // We store value as integer in protobuf to safe space, so max. possible value is 21.47483647 BTC. + long maxDptValue = 6 * Coin.COIN.getValue(); + if (inputs.size() == 1 && + isValidTimeLock(tempAccountingTx, inputs.get(0)) && + doAllOutputsMatchReceivers(outputs, receiverAddresses) && + isWitnessDataWP2SH(inputs.get(0).getTxInWitness()) && + outputs.stream().allMatch(txOutput -> isExpectedScriptType(txOutput, tempAccountingTx)) && + outputs.stream().allMatch(txOutput -> txOutput.getValue() <= maxDptValue)) { + + List accountingTxOutputs = outputs.stream() + .map(output -> new AccountingTxOutput(output.getValue(), burningManNameByAddress.get(output.getAddress()))) + .collect(Collectors.toList()); + return Optional.of(new AccountingTx(AccountingTx.Type.DPT_TX, accountingTxOutputs, tempAccountingTx.getTxId())); + } + + // BTC trade fee tx has 2 or 3 outputs. + // First output to receiver, second reserved for trade and an optional 3rd for change. + // Address check is done in parse method above already. + // Amounts are in a certain range but as fee can change with DAO param changes we cannot set hard limits. + // The min. trade fee in Nov. 2022 is 5000 sat. We use 2500 as lower bound. + // The largest taker fee for a 2 BTC trade is about 0.0059976 BTC (599_760 sat). We use 1_000_000 sat as upper bound. + // Inputs are not constrained. + // Max fees amount is currently 0.0176 BTC. + // We give some extra headroom to cover potential future fee changes. + // We store value as integer in protobuf to safe space, so max. possible value is 21.47483647 BTC. + long maxTradeFeeValue = Coin.parseCoin("0.1").getValue(); + TempAccountingTxOutput firstOutput = outputs.get(0); + if (outputs.size() >= 2 && + outputs.size() <= 3 && + firstOutput.getValue() > 2500 && + firstOutput.getValue() < 1_000_000 && + isExpectedScriptType(firstOutput, tempAccountingTx) && + firstOutput.getValue() <= maxTradeFeeValue) { + // We only keep first output. + String name = burningManNameByAddress.get(firstOutput.getAddress()); + return Optional.of(new AccountingTx(AccountingTx.Type.BTC_TRADE_FEE_TX, + List.of(new AccountingTxOutput(firstOutput.getValue(), name)), + tempAccountingTx.getTxId())); + } + + return Optional.empty(); + } + + // TODO not sure if other ScriptType are to be expected + private boolean isExpectedScriptType(TempAccountingTxOutput txOutput, TempAccountingTx accountingTx) { + boolean result = txOutput.getScriptType() != null && + (txOutput.getScriptType() == ScriptType.PUB_KEY_HASH || + txOutput.getScriptType() == ScriptType.SCRIPT_HASH || + txOutput.getScriptType() == ScriptType.WITNESS_V0_KEYHASH); + if (!result) { + log.error("isExpectedScriptType txOutput.getScriptType()={}, txIf={}", txOutput.getScriptType(), accountingTx.getTxId()); + } + return result; + } + + // All outputs need to be to receiver addresses (incl. legacy BM) + private boolean doAllOutputsMatchReceivers(List outputs, Set receiverAddresses) { + return outputs.stream().allMatch(output -> receiverAddresses.contains(output.getAddress())); + } + + private boolean isValidTimeLock(TempAccountingTx accountingTx, TempAccountingTxInput firstInput) { + // Need to be 0xfffffffe + return accountingTx.isValidDptLockTime() && firstInput.getSequence() == TransactionInput.NO_SEQUENCE - 1; + } + + /* + Example txInWitness: [, 304502210098fcec3ac1c1383d40159587b42e8b79cb3e793004d6ccb080bfb93f02c15f93022039f014eb933c59f988d68a61aa7a1c787f08d94bd0b222104718792798e43e3c01, 304402201f8b37f3b8b5b9944ca88f18f6bb888c5a48dc5183edf204ae6d3781032122e102204dc6397538055d94de1ab683315aac7d87289be0c014569f7b3fa465bf70b6d401, 5221027f6da96ede171617ce79ec305a76871ecce21ad737517b667fc9735f2dc342342102d8d93e02fb0833201274b47a302b47ff81c0b3510508eb0444cb1674d0d8a6d052ae] + */ + private boolean isWitnessDataWP2SH(List txInWitness) { + // txInWitness from the 2of2 multiSig has 4 chunks. + // 0 byte, sig1, sig2, redeemScript + if (txInWitness.size() != 4) { + log.error("txInWitness chunks size not 4 .txInWitness={}", txInWitness); + return false; + } + // First chunk is o byte (empty string) + if (!txInWitness.get(0).isEmpty()) { + log.error("txInWitness.get(0) not empty .txInWitness={}", txInWitness); + return false; + } + + // The 2 signatures are 70 - 73 bytes + int minSigLength = 140; + int maxSigLength = 146; + int fistSigLength = txInWitness.get(1).length(); + if (fistSigLength < minSigLength || fistSigLength > maxSigLength) { + log.error("fistSigLength wrong .txInWitness={}", txInWitness); + return false; + } + int secondSigLength = txInWitness.get(2).length(); + if (secondSigLength < minSigLength || secondSigLength > maxSigLength) { + log.error("secondSigLength wrong .txInWitness={}", txInWitness); + return false; + } + + String redeemScript = txInWitness.get(3); + if (redeemScript.length() != 142) { + log.error("redeemScript not valid length .txInWitness={}", txInWitness); + return false; + } + + // OP_2 pub1 pub2 OP_2 OP_CHECKMULTISIG + // In hex: "5221" + PUB_KEY_1 + "21" + PUB_KEY_2 + "52ae"; + // PubKeys are 33 bytes -> length 66 in hex + String separator = redeemScript.substring(70, 72); + boolean result = redeemScript.startsWith("5221") && + redeemScript.endsWith("52ae") && + separator.equals("21"); + if (!result) { + log.error("redeemScript not valid .txInWitness={}", txInWitness); + } + return result; + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/node/full/AccountingFullNode.java b/core/src/main/java/bisq/core/dao/burningman/accounting/node/full/AccountingFullNode.java new file mode 100644 index 0000000000..3ee9cbef46 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/node/full/AccountingFullNode.java @@ -0,0 +1,323 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.node.full; + +import bisq.core.dao.burningman.accounting.BurningManAccountingService; +import bisq.core.dao.burningman.accounting.blockchain.AccountingBlock; +import bisq.core.dao.burningman.accounting.exceptions.BlockHashNotConnectingException; +import bisq.core.dao.burningman.accounting.exceptions.BlockHeightNotConnectingException; +import bisq.core.dao.burningman.accounting.node.AccountingNode; +import bisq.core.dao.burningman.accounting.node.full.network.AccountingFullNodeNetworkService; +import bisq.core.dao.node.full.RpcException; +import bisq.core.dao.node.full.RpcService; +import bisq.core.dao.node.full.rpc.NotificationHandlerException; +import bisq.core.dao.node.full.rpc.dto.RawDtoBlock; +import bisq.core.dao.state.DaoStateService; + +import bisq.network.p2p.P2PService; + +import bisq.common.UserThread; +import bisq.common.handlers.ResultHandler; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import java.net.ConnectException; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Optional; +import java.util.function.Consumer; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Singleton +public class AccountingFullNode extends AccountingNode { + private final RpcService rpcService; + private final AccountingFullNodeNetworkService accountingFullNodeNetworkService; + + private boolean addBlockHandlerAdded; + private int batchedBlocks; + private long batchStartTime; + private final List pendingRawDtoBlocks = new ArrayList<>(); + private int requestBlocksUpToHeadHeightCounter; + + @Inject + public AccountingFullNode(P2PService p2PService, + DaoStateService daoStateService, + BurningManAccountingService burningManAccountingService, + AccountingBlockParser accountingBlockParser, + AccountingFullNodeNetworkService accountingFullNodeNetworkService, + RpcService rpcService) { + super(p2PService, daoStateService, burningManAccountingService, accountingBlockParser); + + this.rpcService = rpcService; + this.accountingFullNodeNetworkService = accountingFullNodeNetworkService; + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Public methods + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public void start() { + // We do not start yes but wait until DAO block parsing is complete to not interfere with + // that higher priority activity. + } + + @Override + public void shutDown() { + accountingFullNodeNetworkService.shutDown(); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Protected + /////////////////////////////////////////////////////////////////////////////////////////// + + // We start after initial DAO parsing is complete + @Override + protected void onInitialDaoBlockParsingComplete() { + log.info("onInitialDaoBlockParsingComplete"); + rpcService.setup(() -> { + accountingFullNodeNetworkService.addListeners(); + super.onInitialized(); + startRequestBlocks(); + }, + this::handleError); + } + + @Override + protected void onP2PNetworkReady() { + super.onP2PNetworkReady(); + + if (initialBlockRequestsComplete) { + addBlockHandler(); + int heightOfLastBlock = burningManAccountingService.getBlockHeightOfLastBlock(); + log.info("onP2PNetworkReady: We run requestBlocksIfNewBlockAvailable with latest block height {}.", heightOfLastBlock); + requestBlocksIfNewBlockAvailable(heightOfLastBlock); + } + } + + @Override + protected void startRequestBlocks() { + int heightOfLastBlock = burningManAccountingService.getBlockHeightOfLastBlock(); + log.info("startRequestBlocks: heightOfLastBlock={}", heightOfLastBlock); + rpcService.requestChainHeadHeight(headHeight -> { + // If our persisted block is equal to the chain height we have heightOfLastBlock 1 block higher, + // so we do not call parseBlocksOnHeadHeight + log.info("rpcService.requestChainHeadHeight: headHeight={}", headHeight); + requestBlocksUpToHeadHeight(heightOfLastBlock, headHeight); + }, + this::handleError); + } + + @Override + protected void onInitialBlockRequestsComplete() { + super.onInitialBlockRequestsComplete(); + + if (p2pNetworkReady) { + addBlockHandler(); + } else { + log.info("onParseBlockChainComplete but P2P network is not ready yet."); + } + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Private + /////////////////////////////////////////////////////////////////////////////////////////// + + private void addBlockHandler() { + if (!addBlockHandlerAdded) { + addBlockHandlerAdded = true; + rpcService.addNewRawDtoBlockHandler(rawDtoBlock -> { + parseBlock(rawDtoBlock).ifPresent(accountingBlock -> { + maybePublishAccountingBlock(accountingBlock); + burningManAccountingService.onNewBlockReceived(accountingBlock); + }); + }, + this::handleError); + } + } + + private void maybePublishAccountingBlock(AccountingBlock accountingBlock) { + if (p2pNetworkReady && initialBlockRequestsComplete) { + accountingFullNodeNetworkService.publishAccountingBlock(accountingBlock); + } + } + + private void requestBlocksIfNewBlockAvailable(int heightOfLastBlock) { + rpcService.requestChainHeadHeight(headHeight -> { + if (headHeight > heightOfLastBlock) { + log.info("During requests new blocks have arrived. We request again to get the missing blocks." + + "heightOfLastBlock={}, headHeight={}", heightOfLastBlock, headHeight); + requestBlocksUpToHeadHeight(heightOfLastBlock, headHeight); + } else { + log.info("requestChainHeadHeight did not result in a new block, so we complete."); + log.info("Requesting {} blocks took {} seconds", batchedBlocks, (System.currentTimeMillis() - batchStartTime) / 1000d); + if (!initialBlockRequestsComplete) { + onInitialBlockRequestsComplete(); + } + } + }, + this::handleError); + } + + private void requestBlocksUpToHeadHeight(int heightOfLastBlock, int headHeight) { + if (heightOfLastBlock == headHeight) { + log.info("Out heightOfLastBlock is same as headHeight of Bitcoin Core."); + if (!initialBlockRequestsComplete) { + onInitialBlockRequestsComplete(); + } + } else if (heightOfLastBlock < headHeight) { + batchedBlocks = headHeight - heightOfLastBlock; + batchStartTime = System.currentTimeMillis(); + log.info("Request {} blocks from {} to {}", batchedBlocks, heightOfLastBlock, headHeight); + requestBlockRecursively(heightOfLastBlock, + headHeight, + () -> { + // We are done, but it might be that new blocks have arrived in the meantime, + // so we try again with heightOfLastBlock set to current headHeight + requestBlocksIfNewBlockAvailable(headHeight); + }, this::handleError); + } else { + requestBlocksUpToHeadHeightCounter++; + log.warn("We are trying to start with a block which is above the chain height of Bitcoin Core. " + + "We need probably wait longer until Bitcoin Core has fully synced. " + + "We try again after a delay of {} min.", requestBlocksUpToHeadHeightCounter * requestBlocksUpToHeadHeightCounter); + if (requestBlocksUpToHeadHeightCounter <= 5) { + UserThread.runAfter(() -> rpcService.requestChainHeadHeight(height -> + requestBlocksUpToHeadHeight(heightOfLastBlock, height), + this::handleError), requestBlocksUpToHeadHeightCounter * requestBlocksUpToHeadHeightCounter * 60L); + } else { + log.warn("We tried {} times to start with startBlockHeight {} which is above the chain height {} of Bitcoin Core. " + + "It might be that Bitcoin Core has not fully synced. We give up now.", + requestBlocksUpToHeadHeightCounter, heightOfLastBlock, headHeight); + } + } + } + + private void requestBlockRecursively(int heightOfLastBlock, + int headHeight, + ResultHandler completeHandler, + Consumer errorHandler) { + int requestHeight = heightOfLastBlock + 1; + rpcService.requestRawDtoBlock(requestHeight, + rawDtoBlock -> { + parseBlock(rawDtoBlock).ifPresent(this::maybePublishAccountingBlock); + + // Increment heightOfLastBlock and recursively call requestBlockRecursively until we reach headHeight + int newHeightOfLastBlock = burningManAccountingService.getBlockHeightOfLastBlock(); + if (requestHeight < headHeight) { + requestBlockRecursively(newHeightOfLastBlock, headHeight, completeHandler, errorHandler); + } else { + // We are done + completeHandler.handleResult(); + } + }, + errorHandler); + } + + private Optional parseBlock(RawDtoBlock rawDtoBlock) { + // We check if we have a block with that height. If so we return. We do not use the chainHeight as with the earliest + // height we have no block but chainHeight is initially set to the earliest height (bad design ;-( but a bit tricky + // to change now as it used in many areas.) + if (burningManAccountingService.getBlockAtHeight(rawDtoBlock.getHeight()).isPresent()) { + log.info("We have already a block with the height of the new block. Height of new block={}", rawDtoBlock.getHeight()); + return Optional.empty(); + } + + pendingRawDtoBlocks.remove(rawDtoBlock); + + try { + AccountingBlock accountingBlock = accountingBlockParser.parse(rawDtoBlock); + burningManAccountingService.addBlock(accountingBlock); + + // After parsing we check if we have pending future blocks. + // As we successfully added a new block a pending block might fit as next block. + if (!pendingRawDtoBlocks.isEmpty()) { + // We take only first element after sorting (so it is the accountingBlock with the next height) to avoid that + // we would repeat calls in recursions in case we would iterate the list. + pendingRawDtoBlocks.sort(Comparator.comparing(RawDtoBlock::getHeight)); + RawDtoBlock nextPending = pendingRawDtoBlocks.get(0); + if (nextPending.getHeight() == burningManAccountingService.getBlockHeightOfLastBlock() + 1) { + parseBlock(nextPending); + } + } + return Optional.of(accountingBlock); + } catch (BlockHeightNotConnectingException e) { + // If height of rawDtoBlock is not at expected heightForNextBlock but further in the future we add it to pendingRawDtoBlocks + int heightForNextBlock = burningManAccountingService.getBlockHeightOfLastBlock() + 1; + if (rawDtoBlock.getHeight() > heightForNextBlock && !pendingRawDtoBlocks.contains(rawDtoBlock)) { + pendingRawDtoBlocks.add(rawDtoBlock); + log.info("We received a block with a future block height. We store it as pending and try to apply it at the next block. " + + "heightForNextBlock={}, rawDtoBlock: height/hash={}/{}", heightForNextBlock, rawDtoBlock.getHeight(), rawDtoBlock.getHash()); + } + } catch (BlockHashNotConnectingException throwable) { + Optional lastBlock = burningManAccountingService.getLastBlock(); + log.warn("Block not connecting:\n" + + "New block height={}; hash={}, previousBlockHash={}, latest block height={}; hash={}", + rawDtoBlock.getHeight(), + rawDtoBlock.getHash(), + rawDtoBlock.getPreviousBlockHash(), + lastBlock.isPresent() ? lastBlock.get().getHeight() : "lastBlock not present", + lastBlock.isPresent() ? lastBlock.get().getTruncatedHash() : "lastBlock not present"); + + pendingRawDtoBlocks.clear(); + applyReOrg(); + } + return Optional.empty(); + } + + private void handleError(Throwable throwable) { + if (throwable instanceof BlockHashNotConnectingException || throwable instanceof BlockHeightNotConnectingException) { + // We do not escalate that exception as it is handled with the snapshot manager to recover its state. + log.warn(throwable.toString()); + } else { + String errorMessage = "An error occurred: Error=" + throwable.toString(); + log.error(errorMessage); + throwable.printStackTrace(); + + if (throwable instanceof RpcException) { + Throwable cause = throwable.getCause(); + if (cause != null) { + if (cause instanceof ConnectException) { + if (warnMessageHandler != null) + warnMessageHandler.accept("You have configured Bisq to run as BM full node but there is no " + + "localhost Bitcoin Core node detected. You need to have Bitcoin Core started and synced before " + + "starting Bisq. Please restart Bisq with proper BM full node setup or switch to lite node mode."); + return; + } else if (cause instanceof NotificationHandlerException) { + log.error("Error from within block notification daemon: {}", cause.getCause().toString()); + applyReOrg(); + return; + } else if (cause instanceof Error) { + throw (Error) cause; + } + } + } + + if (errorMessageHandler != null) + errorMessageHandler.accept(errorMessage); + } + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/node/full/network/AccountingFullNodeNetworkService.java b/core/src/main/java/bisq/core/dao/burningman/accounting/node/full/network/AccountingFullNodeNetworkService.java new file mode 100644 index 0000000000..1936c35305 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/node/full/network/AccountingFullNodeNetworkService.java @@ -0,0 +1,230 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.node.full.network; + +import bisq.core.dao.burningman.accounting.BurningManAccountingService; +import bisq.core.dao.burningman.accounting.blockchain.AccountingBlock; +import bisq.core.dao.burningman.accounting.node.AccountingNode; +import bisq.core.dao.burningman.accounting.node.messages.GetAccountingBlocksRequest; +import bisq.core.dao.burningman.accounting.node.messages.NewAccountingBlockBroadcastMessage; + +import bisq.network.p2p.network.Connection; +import bisq.network.p2p.network.MessageListener; +import bisq.network.p2p.network.NetworkNode; +import bisq.network.p2p.peers.Broadcaster; +import bisq.network.p2p.peers.PeerManager; + +import bisq.common.UserThread; +import bisq.common.app.DevEnv; +import bisq.common.config.Config; +import bisq.common.proto.network.NetworkEnvelope; + +import org.bitcoinj.core.ECKey; + +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + +import java.math.BigInteger; + +import java.util.HashMap; +import java.util.Map; + +import lombok.extern.slf4j.Slf4j; + +import org.jetbrains.annotations.Nullable; + +import static com.google.common.base.Preconditions.checkArgument; +import static org.bitcoinj.core.Utils.HEX; + +// Taken from FullNodeNetworkService +@Singleton +@Slf4j +public class AccountingFullNodeNetworkService implements MessageListener, PeerManager.Listener { + private static final long CLEANUP_TIMER = 120; + + private final NetworkNode networkNode; + private final PeerManager peerManager; + private final Broadcaster broadcaster; + private final BurningManAccountingService burningManAccountingService; + private final boolean useDevPrivilegeKeys; + @Nullable + private final String bmOracleNodePubKey; + @Nullable + private final ECKey bmOracleNodePrivKey; + + // Key is connection UID + private final Map getBlocksRequestHandlers = new HashMap<>(); + private boolean stopped; + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Constructor + /////////////////////////////////////////////////////////////////////////////////////////// + + @Inject + public AccountingFullNodeNetworkService(NetworkNode networkNode, + PeerManager peerManager, + Broadcaster broadcaster, + BurningManAccountingService burningManAccountingService, + @Named(Config.USE_DEV_PRIVILEGE_KEYS) boolean useDevPrivilegeKeys, + @Named(Config.BM_ORACLE_NODE_PUB_KEY) String bmOracleNodePubKey, + @Named(Config.BM_ORACLE_NODE_PRIV_KEY) String bmOracleNodePrivKey) { + this.networkNode = networkNode; + this.peerManager = peerManager; + this.broadcaster = broadcaster; + this.burningManAccountingService = burningManAccountingService; + this.useDevPrivilegeKeys = useDevPrivilegeKeys; + + if (useDevPrivilegeKeys) { + bmOracleNodePubKey = DevEnv.DEV_PRIVILEGE_PUB_KEY; + bmOracleNodePrivKey = DevEnv.DEV_PRIVILEGE_PRIV_KEY; + } + this.bmOracleNodePubKey = bmOracleNodePubKey.isEmpty() ? null : bmOracleNodePubKey; + this.bmOracleNodePrivKey = bmOracleNodePrivKey.isEmpty() ? null : toEcKey(bmOracleNodePrivKey); + } + + /////////////////////////////////////////////////////////////////////////////////////////// + // API + /////////////////////////////////////////////////////////////////////////////////////////// + + public void addListeners() { + networkNode.addMessageListener(this); + peerManager.addListener(this); + } + + public void shutDown() { + stopped = true; + networkNode.removeMessageListener(this); + peerManager.removeListener(this); + } + + + public void publishAccountingBlock(AccountingBlock block) { + if (bmOracleNodePubKey == null || bmOracleNodePrivKey == null) { + log.warn("Ignore publishNewBlock call. bmOracleNodePubKey or bmOracleNodePrivKey are not set up"); + return; + } + + checkArgument(AccountingNode.isPermittedPubKey(useDevPrivilegeKeys, bmOracleNodePubKey), + "The bmOracleNodePubKey must be included in the hard coded list of supported pub keys"); + + log.info("Publish new block at height={}", block.getHeight()); + byte[] signature = AccountingNode.getSignature(AccountingNode.getSha256Hash(block), bmOracleNodePrivKey); + NewAccountingBlockBroadcastMessage message = new NewAccountingBlockBroadcastMessage(block, bmOracleNodePubKey, signature); + broadcaster.broadcast(message, networkNode.getNodeAddress()); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // PeerManager.Listener implementation + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public void onAllConnectionsLost() { + stopped = true; + } + + @Override + public void onNewConnectionAfterAllConnectionsLost() { + stopped = false; + } + + @Override + public void onAwakeFromStandby() { + stopped = false; + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // MessageListener implementation + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public void onMessage(NetworkEnvelope networkEnvelope, Connection connection) { + if (networkEnvelope instanceof GetAccountingBlocksRequest) { + handleGetBlocksRequest((GetAccountingBlocksRequest) networkEnvelope, connection); + } + } + + private void handleGetBlocksRequest(GetAccountingBlocksRequest getBlocksRequest, Connection connection) { + if (bmOracleNodePubKey == null || bmOracleNodePrivKey == null) { + log.warn("Ignore handleGetBlocksRequest call. bmOracleNodePubKey or bmOracleNodePrivKey are not set up"); + return; + } + + checkArgument(AccountingNode.isPermittedPubKey(useDevPrivilegeKeys, bmOracleNodePubKey), + "The bmOracleNodePubKey must be included in the hard coded list of supported pub keys"); + + if (stopped) { + log.warn("We have stopped already. We ignore that onMessage call."); + return; + } + + String uid = connection.getUid(); + if (getBlocksRequestHandlers.containsKey(uid)) { + log.warn("We have already a GetDataRequestHandler for that connection started. " + + "We start a cleanup timer if the handler has not closed by itself in between 2 minutes."); + + UserThread.runAfter(() -> { + if (getBlocksRequestHandlers.containsKey(uid)) { + GetAccountingBlocksRequestHandler handler = getBlocksRequestHandlers.get(uid); + handler.stop(); + getBlocksRequestHandlers.remove(uid); + } + }, CLEANUP_TIMER); + return; + } + + GetAccountingBlocksRequestHandler requestHandler = new GetAccountingBlocksRequestHandler(networkNode, + burningManAccountingService, + bmOracleNodePrivKey, + bmOracleNodePubKey, + new GetAccountingBlocksRequestHandler.Listener() { + @Override + public void onComplete() { + getBlocksRequestHandlers.remove(uid); + } + + @Override + public void onFault(String errorMessage, @Nullable Connection connection) { + getBlocksRequestHandlers.remove(uid); + if (!stopped) { + log.trace("GetDataRequestHandler failed.\n\tConnection={}\n\t" + + "ErrorMessage={}", connection, errorMessage); + if (connection != null) { + peerManager.handleConnectionFault(connection); + } + } else { + log.warn("We have stopped already. We ignore that getDataRequestHandler.handle.onFault call."); + } + } + }); + getBlocksRequestHandlers.put(uid, requestHandler); + requestHandler.onGetBlocksRequest(getBlocksRequest, connection); + } + + private ECKey toEcKey(String bmOracleNodePrivKey) { + try { + return ECKey.fromPrivate(new BigInteger(1, HEX.decode(bmOracleNodePrivKey))); + } catch (Throwable t) { + log.error("Error at creating EC key out of bmOracleNodePrivKey", t); + return null; + } + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/node/full/network/GetAccountingBlocksRequestHandler.java b/core/src/main/java/bisq/core/dao/burningman/accounting/node/full/network/GetAccountingBlocksRequestHandler.java new file mode 100644 index 0000000000..6e1148a4b9 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/node/full/network/GetAccountingBlocksRequestHandler.java @@ -0,0 +1,171 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.node.full.network; + +import bisq.core.dao.burningman.accounting.BurningManAccountingService; +import bisq.core.dao.burningman.accounting.blockchain.AccountingBlock; +import bisq.core.dao.burningman.accounting.node.AccountingNode; +import bisq.core.dao.burningman.accounting.node.messages.GetAccountingBlocksRequest; +import bisq.core.dao.burningman.accounting.node.messages.GetAccountingBlocksResponse; + +import bisq.network.p2p.network.CloseConnectionReason; +import bisq.network.p2p.network.Connection; +import bisq.network.p2p.network.NetworkNode; + +import bisq.common.Timer; +import bisq.common.UserThread; + +import org.bitcoinj.core.ECKey; + +import com.google.common.util.concurrent.FutureCallback; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.common.util.concurrent.SettableFuture; + +import java.util.List; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + +import lombok.extern.slf4j.Slf4j; + +import org.jetbrains.annotations.NotNull; + +// Taken from GetBlocksRequestHandler +@Slf4j +class GetAccountingBlocksRequestHandler { + private static final long TIMEOUT_MIN = 3; + + /////////////////////////////////////////////////////////////////////////////////////////// + // Listener + /////////////////////////////////////////////////////////////////////////////////////////// + + public interface Listener { + void onComplete(); + + void onFault(String errorMessage, Connection connection); + } + + private final NetworkNode networkNode; + private final BurningManAccountingService burningManAccountingService; + private final ECKey bmOracleNodePrivKey; + private final String bmOracleNodePubKey; + private final Listener listener; + private Timer timeoutTimer; + private boolean stopped; + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Constructor + /////////////////////////////////////////////////////////////////////////////////////////// + + GetAccountingBlocksRequestHandler(NetworkNode networkNode, + BurningManAccountingService burningManAccountingService, + ECKey bmOracleNodePrivKey, + String bmOracleNodePubKey, + Listener listener) { + this.networkNode = networkNode; + this.burningManAccountingService = burningManAccountingService; + this.bmOracleNodePrivKey = bmOracleNodePrivKey; + this.bmOracleNodePubKey = bmOracleNodePubKey; + this.listener = listener; + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // API + /////////////////////////////////////////////////////////////////////////////////////////// + + public void onGetBlocksRequest(GetAccountingBlocksRequest request, Connection connection) { + long ts = System.currentTimeMillis(); + List blocks = burningManAccountingService.getBlocks().stream() + .filter(block -> block.getHeight() >= request.getFromBlockHeight()) + .collect(Collectors.toList()); + byte[] signature = AccountingNode.getSignature(AccountingNode.getSha256Hash(blocks), bmOracleNodePrivKey); + GetAccountingBlocksResponse getBlocksResponse = new GetAccountingBlocksResponse(blocks, request.getNonce(), bmOracleNodePubKey, signature); + log.info("Received GetAccountingBlocksRequest from {} for blocks from height {}. " + + "Building GetAccountingBlocksResponse with {} blocks took {} ms.", + connection.getPeersNodeAddressOptional(), request.getFromBlockHeight(), + blocks.size(), System.currentTimeMillis() - ts); + + if (timeoutTimer != null) { + timeoutTimer.stop(); + log.warn("Timeout was already running. We stopped it."); + } + timeoutTimer = UserThread.runAfter(() -> { // setup before sending to avoid race conditions + String errorMessage = "A timeout occurred for getBlocksResponse.requestNonce:" + + getBlocksResponse.getRequestNonce() + + " on connection: " + connection; + handleFault(errorMessage, CloseConnectionReason.SEND_MSG_TIMEOUT, connection); + }, + TIMEOUT_MIN, TimeUnit.MINUTES); + + SettableFuture future = networkNode.sendMessage(connection, getBlocksResponse); + Futures.addCallback(future, new FutureCallback<>() { + @Override + public void onSuccess(Connection connection) { + if (!stopped) { + log.info("Send DataResponse to {} succeeded. getBlocksResponse.getBlocks().size()={}", + connection.getPeersNodeAddressOptional(), getBlocksResponse.getBlocks().size()); + cleanup(); + listener.onComplete(); + } else { + log.trace("We have stopped already. We ignore that networkNode.sendMessage.onSuccess call."); + } + } + + @Override + public void onFailure(@NotNull Throwable throwable) { + if (!stopped) { + String errorMessage = "Sending getBlocksResponse to " + connection + + " failed. That is expected if the peer is offline. getBlocksResponse=" + getBlocksResponse + "." + + "Exception: " + throwable.getMessage(); + handleFault(errorMessage, CloseConnectionReason.SEND_MSG_FAILURE, connection); + } else { + log.trace("We have stopped already. We ignore that networkNode.sendMessage.onFailure call."); + } + } + }, MoreExecutors.directExecutor()); + } + + public void stop() { + cleanup(); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Private + /////////////////////////////////////////////////////////////////////////////////////////// + + private void handleFault(String errorMessage, CloseConnectionReason closeConnectionReason, Connection connection) { + if (!stopped) { + log.warn("{}, closeConnectionReason={}", errorMessage, closeConnectionReason); + cleanup(); + listener.onFault(errorMessage, connection); + } else { + log.warn("We have already stopped (handleFault)"); + } + } + + private void cleanup() { + stopped = true; + if (timeoutTimer != null) { + timeoutTimer.stop(); + timeoutTimer = null; + } + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/node/lite/AccountingLiteNode.java b/core/src/main/java/bisq/core/dao/burningman/accounting/node/lite/AccountingLiteNode.java new file mode 100644 index 0000000000..d6c437682c --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/node/lite/AccountingLiteNode.java @@ -0,0 +1,310 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.node.lite; + +import bisq.core.btc.setup.WalletsSetup; +import bisq.core.btc.wallet.BsqWalletService; +import bisq.core.dao.burningman.accounting.BurningManAccountingService; +import bisq.core.dao.burningman.accounting.blockchain.AccountingBlock; +import bisq.core.dao.burningman.accounting.exceptions.BlockHashNotConnectingException; +import bisq.core.dao.burningman.accounting.exceptions.BlockHeightNotConnectingException; +import bisq.core.dao.burningman.accounting.node.AccountingNode; +import bisq.core.dao.burningman.accounting.node.full.AccountingBlockParser; +import bisq.core.dao.burningman.accounting.node.lite.network.AccountingLiteNodeNetworkService; +import bisq.core.dao.burningman.accounting.node.messages.GetAccountingBlocksResponse; +import bisq.core.dao.burningman.accounting.node.messages.NewAccountingBlockBroadcastMessage; +import bisq.core.dao.state.DaoStateService; + +import bisq.network.p2p.P2PService; +import bisq.network.p2p.network.ConnectionState; + +import bisq.common.Timer; +import bisq.common.UserThread; +import bisq.common.config.Config; +import bisq.common.util.Hex; + +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + +import javafx.beans.value.ChangeListener; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Optional; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Singleton +public class AccountingLiteNode extends AccountingNode implements AccountingLiteNodeNetworkService.Listener { + private static final int CHECK_FOR_BLOCK_RECEIVED_DELAY_SEC = 10; + + private final WalletsSetup walletsSetup; + private final BsqWalletService bsqWalletService; + private final AccountingLiteNodeNetworkService accountingLiteNodeNetworkService; + private final boolean useDevPrivilegeKeys; + + private final List pendingAccountingBlocks = new ArrayList<>(); + private final ChangeListener blockDownloadListener; + private Timer checkForBlockReceivedTimer; + private int requestBlocksCounter; + + @Inject + public AccountingLiteNode(P2PService p2PService, + DaoStateService daoStateService, + BurningManAccountingService burningManAccountingService, + AccountingBlockParser accountingBlockParser, + WalletsSetup walletsSetup, + BsqWalletService bsqWalletService, + AccountingLiteNodeNetworkService accountingLiteNodeNetworkService, + @Named(Config.USE_DEV_PRIVILEGE_KEYS) boolean useDevPrivilegeKeys) { + super(p2PService, daoStateService, burningManAccountingService, accountingBlockParser); + + this.walletsSetup = walletsSetup; + this.bsqWalletService = bsqWalletService; + this.accountingLiteNodeNetworkService = accountingLiteNodeNetworkService; + this.useDevPrivilegeKeys = useDevPrivilegeKeys; + + blockDownloadListener = (observable, oldValue, newValue) -> { + if ((double) newValue == 1) { + setupWalletBestBlockListener(); + } + }; + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Public methods + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public void start() { + // We do not start yes but wait until DAO block parsing is complete to not interfere with + // that higher priority activity. + } + + @Override + public void shutDown() { + accountingLiteNodeNetworkService.shutDown(); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // AccountingLiteNodeNetworkService.Listener + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public void onRequestedBlocksReceived(GetAccountingBlocksResponse getBlocksResponse) { + List blocks = getBlocksResponse.getBlocks(); + if (!blocks.isEmpty() && isValidPubKeyAndSignature(AccountingNode.getSha256Hash(blocks), + getBlocksResponse.getPubKey(), + getBlocksResponse.getSignature(), + useDevPrivilegeKeys)) { + processAccountingBlocks(blocks); + } + } + + @Override + public void onNewBlockReceived(NewAccountingBlockBroadcastMessage message) { + AccountingBlock accountingBlock = message.getBlock(); + if (isValidPubKeyAndSignature(AccountingNode.getSha256Hash(accountingBlock), + message.getPubKey(), + message.getSignature(), + useDevPrivilegeKeys)) { + processNewAccountingBlock(accountingBlock); + } + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Protected methods + /////////////////////////////////////////////////////////////////////////////////////////// + + // We start after initial DAO parsing is complete + @Override + protected void onInitialDaoBlockParsingComplete() { + accountingLiteNodeNetworkService.addListeners(); + + // We wait until the wallet is synced before using it for triggering requests + if (walletsSetup.isDownloadComplete()) { + setupWalletBestBlockListener(); + } else { + walletsSetup.downloadPercentageProperty().addListener(blockDownloadListener); + } + + super.onInitialized(); + } + + @Override + protected void onP2PNetworkReady() { + super.onP2PNetworkReady(); + + accountingLiteNodeNetworkService.addListener(this); + + if (!initialBlockRequestsComplete) { + startRequestBlocks(); + } + } + + @Override + protected void startRequestBlocks() { + int heightOfLastBlock = burningManAccountingService.getBlockHeightOfLastBlock(); + if (walletsSetup.isDownloadComplete() && heightOfLastBlock == bsqWalletService.getBestChainHeight()) { + log.info("No block request needed as we have already the most recent block. " + + "heightOfLastBlock={}, bsqWalletService.getBestChainHeight()={}", + heightOfLastBlock, bsqWalletService.getBestChainHeight()); + onInitialBlockRequestsComplete(); + return; + } + + ConnectionState.incrementExpectedInitialDataResponses(); + accountingLiteNodeNetworkService.requestBlocks(heightOfLastBlock + 1); + } + + @Override + protected void applyReOrg() { + pendingAccountingBlocks.clear(); + accountingLiteNodeNetworkService.reset(); + super.applyReOrg(); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Private + /////////////////////////////////////////////////////////////////////////////////////////// + + private void processAccountingBlocks(List blocks) { + log.info("We received blocks from height {} to {}", + blocks.get(0).getHeight(), + blocks.get(blocks.size() - 1).getHeight()); + + boolean requiresReOrg = false; + for (AccountingBlock block : blocks) { + try { + burningManAccountingService.addBlock(block); + } catch (BlockHeightNotConnectingException e) { + log.info("Height not connecting. This could happen if we received multiple responses and had already applied a previous one. {}", e.toString()); + } catch (BlockHashNotConnectingException e) { + log.warn("Interrupt loop because a reorg is required. {}", e.toString()); + requiresReOrg = true; + break; + } + } + if (requiresReOrg) { + applyReOrg(); + return; + } + + int heightOfLastBlock = burningManAccountingService.getBlockHeightOfLastBlock(); + if (walletsSetup.isDownloadComplete() && heightOfLastBlock < bsqWalletService.getBestChainHeight()) { + accountingLiteNodeNetworkService.requestBlocks(heightOfLastBlock + 1); + } else { + if (!initialBlockRequestsComplete) { + onInitialBlockRequestsComplete(); + } + } + } + + private void processNewAccountingBlock(AccountingBlock accountingBlock) { + int blockHeight = accountingBlock.getHeight(); + log.info("onNewBlockReceived: accountingBlock at height {}", blockHeight); + + pendingAccountingBlocks.remove(accountingBlock); + try { + burningManAccountingService.addBlock(accountingBlock); + burningManAccountingService.onNewBlockReceived(accountingBlock); + + // After parsing we check if we have pending blocks we might have received earlier but which have been + // not connecting from the latest height we had. The list is sorted by height + if (!pendingAccountingBlocks.isEmpty()) { + // We take only first element after sorting (so it is the accountingBlock with the next height) to avoid that + // we would repeat calls in recursions in case we would iterate the list. + pendingAccountingBlocks.sort(Comparator.comparing(AccountingBlock::getHeight)); + AccountingBlock nextPending = pendingAccountingBlocks.get(0); + if (nextPending.getHeight() == burningManAccountingService.getBlockHeightOfLastBlock() + 1) { + processNewAccountingBlock(nextPending); + } + } + } catch (BlockHeightNotConnectingException e) { + // If height of rawDtoBlock is not at expected heightForNextBlock but further in the future we add it to pendingRawDtoBlocks + int heightForNextBlock = burningManAccountingService.getBlockHeightOfLastBlock() + 1; + if (accountingBlock.getHeight() > heightForNextBlock && !pendingAccountingBlocks.contains(accountingBlock)) { + pendingAccountingBlocks.add(accountingBlock); + log.info("We received a accountingBlock with a future accountingBlock height. We store it as pending and try to apply it at the next accountingBlock. " + + "heightForNextBlock={}, accountingBlock: height/truncatedHash={}/{}", heightForNextBlock, accountingBlock.getHeight(), accountingBlock.getTruncatedHash()); + + requestBlocksCounter++; + log.warn("We are trying to call requestBlocks with heightForNextBlock {} after a delay of {} min.", + heightForNextBlock, requestBlocksCounter * requestBlocksCounter); + if (requestBlocksCounter <= 5) { + UserThread.runAfter(() -> { + pendingAccountingBlocks.clear(); + accountingLiteNodeNetworkService.requestBlocks(heightForNextBlock); + }, + requestBlocksCounter * requestBlocksCounter * 60L); + } else { + log.warn("We tried {} times to call requestBlocks with heightForNextBlock {}.", + requestBlocksCounter, heightForNextBlock); + } + } + } catch (BlockHashNotConnectingException e) { + Optional lastBlock = burningManAccountingService.getLastBlock(); + log.warn("Block not connecting:\n" + + "New block height/hash/previousBlockHash={}/{}/{}, latest block height/hash={}/{}", + accountingBlock.getHeight(), + Hex.encode(accountingBlock.getTruncatedHash()), + Hex.encode(accountingBlock.getTruncatedPreviousBlockHash()), + lastBlock.isPresent() ? lastBlock.get().getHeight() : "lastBlock not present", + lastBlock.isPresent() ? Hex.encode(lastBlock.get().getTruncatedHash()) : "lastBlock not present"); + + applyReOrg(); + } + } + + private void setupWalletBestBlockListener() { + walletsSetup.downloadPercentageProperty().removeListener(blockDownloadListener); + + bsqWalletService.addNewBestBlockListener(blockFromWallet -> { + // If we are not completed with initial block requests we return + if (!initialBlockRequestsComplete) + return; + + if (checkForBlockReceivedTimer != null) { + // In case we received a new block before out timer gets called we stop the old timer + checkForBlockReceivedTimer.stop(); + } + + int walletBlockHeight = blockFromWallet.getHeight(); + log.info("New block at height {} from bsqWalletService", walletBlockHeight); + + // We expect to receive the new BSQ block from the network shortly after BitcoinJ has been aware of it. + // If we don't receive it we request it manually from seed nodes + checkForBlockReceivedTimer = UserThread.runAfter(() -> { + int heightOfLastBlock = burningManAccountingService.getBlockHeightOfLastBlock(); + if (heightOfLastBlock < walletBlockHeight) { + log.warn("We did not receive a block from the network {} seconds after we saw the new block in BitcoinJ. " + + "We request from our seed nodes missing blocks from block height {}.", + CHECK_FOR_BLOCK_RECEIVED_DELAY_SEC, heightOfLastBlock + 1); + accountingLiteNodeNetworkService.requestBlocks(heightOfLastBlock + 1); + } + }, CHECK_FOR_BLOCK_RECEIVED_DELAY_SEC); + }); + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/node/lite/network/AccountingLiteNodeNetworkService.java b/core/src/main/java/bisq/core/dao/burningman/accounting/node/lite/network/AccountingLiteNodeNetworkService.java new file mode 100644 index 0000000000..d0c7f92c04 --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/node/lite/network/AccountingLiteNodeNetworkService.java @@ -0,0 +1,392 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.node.lite.network; + +import bisq.core.dao.burningman.accounting.node.messages.GetAccountingBlocksResponse; +import bisq.core.dao.burningman.accounting.node.messages.NewAccountingBlockBroadcastMessage; + +import bisq.network.p2p.NodeAddress; +import bisq.network.p2p.network.CloseConnectionReason; +import bisq.network.p2p.network.Connection; +import bisq.network.p2p.network.ConnectionListener; +import bisq.network.p2p.network.MessageListener; +import bisq.network.p2p.network.NetworkNode; +import bisq.network.p2p.peers.Broadcaster; +import bisq.network.p2p.peers.PeerManager; +import bisq.network.p2p.seed.SeedNodeRepository; +import bisq.network.p2p.storage.P2PDataStorage; + +import bisq.common.Timer; +import bisq.common.UserThread; +import bisq.common.app.DevEnv; +import bisq.common.proto.network.NetworkEnvelope; +import bisq.common.util.Tuple2; + +import javax.inject.Inject; +import javax.inject.Singleton; + +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.stream.Collectors; + +import lombok.extern.slf4j.Slf4j; + +import org.jetbrains.annotations.Nullable; + +// Taken from LiteNodeNetworkService +@Slf4j +@Singleton +public class AccountingLiteNodeNetworkService implements MessageListener, ConnectionListener, PeerManager.Listener { + private static final long RETRY_DELAY_SEC = 10; + private static final long CLEANUP_TIMER = 120; + private static final int MAX_RETRY = 12; + + private int retryCounter = 0; + private int lastRequestedBlockHeight; + private int lastReceivedBlockHeight; + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Listener + /////////////////////////////////////////////////////////////////////////////////////////// + + public interface Listener { + void onRequestedBlocksReceived(GetAccountingBlocksResponse getBlocksResponse); + + void onNewBlockReceived(NewAccountingBlockBroadcastMessage newBlockBroadcastMessage); + } + + private final NetworkNode networkNode; + private final PeerManager peerManager; + private final Broadcaster broadcaster; + private final Collection seedNodeAddresses; + + private final List listeners = new CopyOnWriteArrayList<>(); + + // Key is tuple of seedNode address and requested blockHeight + private final Map, RequestAccountingBlocksHandler> requestBlocksHandlerMap = new HashMap<>(); + private Timer retryTimer; + private boolean stopped; + private final Set receivedBlockMessages = new HashSet<>(); + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Constructor + /////////////////////////////////////////////////////////////////////////////////////////// + + @Inject + public AccountingLiteNodeNetworkService(NetworkNode networkNode, + PeerManager peerManager, + Broadcaster broadcaster, + SeedNodeRepository seedNodesRepository) { + this.networkNode = networkNode; + this.peerManager = peerManager; + this.broadcaster = broadcaster; + // seedNodeAddresses can be empty (in case there is only 1 seed node, the seed node starting up has no other seed nodes) + this.seedNodeAddresses = new HashSet<>(seedNodesRepository.getSeedNodeAddresses()); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // API + /////////////////////////////////////////////////////////////////////////////////////////// + + public void addListeners() { + networkNode.addMessageListener(this); + networkNode.addConnectionListener(this); + peerManager.addListener(this); + } + + public void shutDown() { + stopped = true; + stopRetryTimer(); + networkNode.removeMessageListener(this); + networkNode.removeConnectionListener(this); + peerManager.removeListener(this); + closeAllHandlers(); + } + + public void addListener(Listener listener) { + listeners.add(listener); + } + + public void requestBlocks(int startBlockHeight) { + lastRequestedBlockHeight = startBlockHeight; + Optional connectionToSeedNodeOptional = networkNode.getConfirmedConnections().stream() + .filter(peerManager::isSeedNode) + .findAny(); + + connectionToSeedNodeOptional.flatMap(Connection::getPeersNodeAddressOptional) + .ifPresentOrElse(candidate -> { + seedNodeAddresses.remove(candidate); + requestBlocks(candidate, startBlockHeight); + }, () -> { + tryWithNewSeedNode(startBlockHeight); + }); + } + + public void reset() { + lastRequestedBlockHeight = 0; + lastReceivedBlockHeight = 0; + retryCounter = 0; + requestBlocksHandlerMap.values().forEach(RequestAccountingBlocksHandler::terminate); + requestBlocksHandlerMap.clear(); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // ConnectionListener implementation + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public void onConnection(Connection connection) { + } + + @Override + public void onDisconnect(CloseConnectionReason closeConnectionReason, Connection connection) { + closeHandler(connection); + + if (peerManager.isPeerBanned(closeConnectionReason, connection)) { + connection.getPeersNodeAddressOptional().ifPresent(nodeAddress -> { + seedNodeAddresses.remove(nodeAddress); + removeFromRequestBlocksHandlerMap(nodeAddress); + }); + } + } + + @Override + public void onError(Throwable throwable) { + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // PeerManager.Listener implementation + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public void onAllConnectionsLost() { + log.info("onAllConnectionsLost"); + closeAllHandlers(); + stopRetryTimer(); + stopped = true; + tryWithNewSeedNode(lastRequestedBlockHeight); + } + + @Override + public void onNewConnectionAfterAllConnectionsLost() { + log.info("onNewConnectionAfterAllConnectionsLost"); + closeAllHandlers(); + stopped = false; + tryWithNewSeedNode(lastRequestedBlockHeight); + } + + @Override + public void onAwakeFromStandby() { + log.info("onAwakeFromStandby"); + closeAllHandlers(); + stopped = false; + tryWithNewSeedNode(lastRequestedBlockHeight); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // MessageListener implementation + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public void onMessage(NetworkEnvelope networkEnvelope, Connection connection) { + if (networkEnvelope instanceof NewAccountingBlockBroadcastMessage) { + NewAccountingBlockBroadcastMessage newBlockBroadcastMessage = (NewAccountingBlockBroadcastMessage) networkEnvelope; + P2PDataStorage.ByteArray truncatedHash = new P2PDataStorage.ByteArray(newBlockBroadcastMessage.getBlock().getTruncatedHash()); + if (receivedBlockMessages.contains(truncatedHash)) { + log.debug("We had that message already and do not further broadcast it. hash={}", truncatedHash); + return; + } + + log.info("We received a NewAccountingBlockBroadcastMessage from peer {} and broadcast it to our peers. height={} truncatedHash={}", + connection.getPeersNodeAddressOptional().orElse(null), newBlockBroadcastMessage.getBlock().getHeight(), truncatedHash); + receivedBlockMessages.add(truncatedHash); + broadcaster.broadcast(newBlockBroadcastMessage, connection.getPeersNodeAddressOptional().orElse(null)); + listeners.forEach(listener -> listener.onNewBlockReceived(newBlockBroadcastMessage)); + } + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // RequestData + /////////////////////////////////////////////////////////////////////////////////////////// + + private void requestBlocks(NodeAddress peersNodeAddress, int startBlockHeight) { + if (stopped) { + log.warn("We have stopped already. We ignore that requestData call."); + return; + } + + Tuple2 key = new Tuple2<>(peersNodeAddress, startBlockHeight); + if (requestBlocksHandlerMap.containsKey(key)) { + log.warn("We have started already a requestDataHandshake for startBlockHeight {} to peer. nodeAddress={}\n" + + "We start a cleanup timer if the handler has not closed by itself in between 2 minutes.", + peersNodeAddress, startBlockHeight); + + UserThread.runAfter(() -> { + if (requestBlocksHandlerMap.containsKey(key)) { + RequestAccountingBlocksHandler handler = requestBlocksHandlerMap.get(key); + handler.terminate(); + requestBlocksHandlerMap.remove(key); + } + }, CLEANUP_TIMER); + return; + } + + if (startBlockHeight < lastReceivedBlockHeight) { + log.warn("startBlockHeight must not be smaller than lastReceivedBlockHeight. That should never happen." + + "startBlockHeight={},lastReceivedBlockHeight={}", startBlockHeight, lastReceivedBlockHeight); + DevEnv.logErrorAndThrowIfDevMode("startBlockHeight must be larger than lastReceivedBlockHeight. startBlockHeight=" + + startBlockHeight + " / lastReceivedBlockHeight=" + lastReceivedBlockHeight); + return; + } + + RequestAccountingBlocksHandler requestAccountingBlocksHandler = new RequestAccountingBlocksHandler(networkNode, + peerManager, + peersNodeAddress, + startBlockHeight, + new RequestAccountingBlocksHandler.Listener() { + @Override + public void onComplete(GetAccountingBlocksResponse getBlocksResponse) { + log.info("requestBlocksHandler to {} completed", peersNodeAddress); + stopRetryTimer(); + + // need to remove before listeners are notified as they cause the update call + requestBlocksHandlerMap.remove(key); + // we only notify if our request was latest + if (startBlockHeight > lastReceivedBlockHeight) { + lastReceivedBlockHeight = startBlockHeight; + + listeners.forEach(listener -> listener.onRequestedBlocksReceived(getBlocksResponse)); + } else { + log.warn("We got a response which is already obsolete because we received a " + + "response from a request with same or higher block height."); + } + } + + @Override + public void onFault(String errorMessage, @Nullable Connection connection) { + log.warn("requestBlocksHandler with outbound connection failed.\n\tnodeAddress={}\n\t" + + "ErrorMessage={}", peersNodeAddress, errorMessage); + + peerManager.handleConnectionFault(peersNodeAddress); + requestBlocksHandlerMap.remove(key); + + tryWithNewSeedNode(startBlockHeight); + } + }); + requestBlocksHandlerMap.put(key, requestAccountingBlocksHandler); + requestAccountingBlocksHandler.requestBlocks(); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Utils + /////////////////////////////////////////////////////////////////////////////////////////// + + private void tryWithNewSeedNode(int startBlockHeight) { + if (networkNode.getAllConnections().isEmpty()) { + return; + } + + if (lastRequestedBlockHeight == 0) { + return; + } + + if (stopped) { + return; + } + + if (retryTimer != null) { + log.warn("We have a retry timer already running."); + return; + } + + retryCounter++; + + if (retryCounter > MAX_RETRY) { + log.warn("We tried {} times but could not connect to a seed node.", retryCounter); + return; + } + + retryTimer = UserThread.runAfter(() -> { + stopped = false; + + stopRetryTimer(); + + List list = seedNodeAddresses.stream() + .filter(e -> peerManager.isSeedNode(e) && !peerManager.isSelf(e)) + .collect(Collectors.toList()); + Collections.shuffle(list); + + if (!list.isEmpty()) { + NodeAddress nextCandidate = list.get(0); + seedNodeAddresses.remove(nextCandidate); + log.info("We try requestBlocks from {} with startBlockHeight={}", nextCandidate, startBlockHeight); + requestBlocks(nextCandidate, startBlockHeight); + } else { + log.warn("No more seed nodes available we could try."); + } + }, + RETRY_DELAY_SEC); + } + + private void stopRetryTimer() { + if (retryTimer != null) { + retryTimer.stop(); + retryTimer = null; + } + } + + private void closeHandler(Connection connection) { + Optional peersNodeAddressOptional = connection.getPeersNodeAddressOptional(); + if (peersNodeAddressOptional.isPresent()) { + NodeAddress nodeAddress = peersNodeAddressOptional.get(); + removeFromRequestBlocksHandlerMap(nodeAddress); + } else { + log.trace("closeHandler: nodeAddress not set in connection {}", connection); + } + } + + private void removeFromRequestBlocksHandlerMap(NodeAddress nodeAddress) { + requestBlocksHandlerMap.entrySet().stream() + .filter(e -> e.getKey().first.equals(nodeAddress)) + .findAny() + .ifPresent(e -> { + e.getValue().terminate(); + requestBlocksHandlerMap.remove(e.getKey()); + }); + } + + private void closeAllHandlers() { + requestBlocksHandlerMap.values().forEach(RequestAccountingBlocksHandler::terminate); + requestBlocksHandlerMap.clear(); + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/node/lite/network/RequestAccountingBlocksHandler.java b/core/src/main/java/bisq/core/dao/burningman/accounting/node/lite/network/RequestAccountingBlocksHandler.java new file mode 100644 index 0000000000..303b0bda3e --- /dev/null +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/node/lite/network/RequestAccountingBlocksHandler.java @@ -0,0 +1,219 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.core.dao.burningman.accounting.node.lite.network; + + +import bisq.core.dao.burningman.accounting.node.messages.GetAccountingBlocksRequest; +import bisq.core.dao.burningman.accounting.node.messages.GetAccountingBlocksResponse; + +import bisq.network.p2p.NodeAddress; +import bisq.network.p2p.network.CloseConnectionReason; +import bisq.network.p2p.network.Connection; +import bisq.network.p2p.network.MessageListener; +import bisq.network.p2p.network.NetworkNode; +import bisq.network.p2p.peers.PeerManager; + +import bisq.common.Timer; +import bisq.common.UserThread; +import bisq.common.proto.network.NetworkEnvelope; + +import com.google.common.util.concurrent.FutureCallback; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.MoreExecutors; +import com.google.common.util.concurrent.SettableFuture; + +import java.util.Optional; +import java.util.Random; +import java.util.concurrent.TimeUnit; + +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +// Taken from RequestBlocksHandler +@Slf4j +public class RequestAccountingBlocksHandler implements MessageListener { + private static final long TIMEOUT_MIN = 3; + + /////////////////////////////////////////////////////////////////////////////////////////// + // Listener + /////////////////////////////////////////////////////////////////////////////////////////// + + public interface Listener { + void onComplete(GetAccountingBlocksResponse getBlocksResponse); + + @SuppressWarnings("UnusedParameters") + void onFault(String errorMessage, @SuppressWarnings("SameParameterValue") @Nullable Connection connection); + } + + + private final NetworkNode networkNode; + private final PeerManager peerManager; + @Getter + private final NodeAddress nodeAddress; + @Getter + private final int startBlockHeight; + private final Listener listener; + private Timer timeoutTimer; + private final int nonce = new Random().nextInt(); + private boolean stopped; + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Constructor + /////////////////////////////////////////////////////////////////////////////////////////// + + public RequestAccountingBlocksHandler(NetworkNode networkNode, + PeerManager peerManager, + NodeAddress nodeAddress, + int startBlockHeight, + Listener listener) { + this.networkNode = networkNode; + this.peerManager = peerManager; + this.nodeAddress = nodeAddress; + this.startBlockHeight = startBlockHeight; + this.listener = listener; + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // API + /////////////////////////////////////////////////////////////////////////////////////////// + + public void requestBlocks() { + if (stopped) { + log.warn("We have stopped already. We ignore that requestData call."); + return; + } + + GetAccountingBlocksRequest getBlocksRequest = new GetAccountingBlocksRequest(startBlockHeight, nonce, networkNode.getNodeAddress()); + + if (timeoutTimer != null) { + log.warn("We had a timer already running and stop it."); + timeoutTimer.stop(); + } + timeoutTimer = UserThread.runAfter(() -> { // setup before sending to avoid race conditions + if (!stopped) { + String errorMessage = "A timeout occurred when sending getBlocksRequest:" + getBlocksRequest + + " on peersNodeAddress:" + nodeAddress; + log.debug("{} / RequestDataHandler={}", errorMessage, RequestAccountingBlocksHandler.this); + handleFault(errorMessage, nodeAddress, CloseConnectionReason.SEND_MSG_TIMEOUT); + } else { + log.warn("We have stopped already. We ignore that timeoutTimer.run call. " + + "Might be caused by a previous networkNode.sendMessage.onFailure."); + } + }, + TIMEOUT_MIN, TimeUnit.MINUTES); + + log.info("We request blocks from peer {} from block height {}.", nodeAddress, getBlocksRequest.getFromBlockHeight()); + + networkNode.addMessageListener(this); + + SettableFuture future = networkNode.sendMessage(nodeAddress, getBlocksRequest); + Futures.addCallback(future, new FutureCallback<>() { + @Override + public void onSuccess(Connection connection) { + log.info("Sending of GetAccountingBlocksRequest message to peer {} succeeded.", nodeAddress.getFullAddress()); + } + + @Override + public void onFailure(@NotNull Throwable throwable) { + if (!stopped) { + String errorMessage = "Sending getBlocksRequest to " + nodeAddress + + " failed. That is expected if the peer is offline.\n\t" + + "getBlocksRequest=" + getBlocksRequest + "." + + "\n\tException=" + throwable.getMessage(); + log.error(errorMessage); + handleFault(errorMessage, nodeAddress, CloseConnectionReason.SEND_MSG_FAILURE); + } else { + log.warn("We have stopped already. We ignore that networkNode.sendMessage.onFailure call."); + } + } + }, MoreExecutors.directExecutor()); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // MessageListener implementation + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + public void onMessage(NetworkEnvelope networkEnvelope, Connection connection) { + if (networkEnvelope instanceof GetAccountingBlocksResponse) { + if (stopped) { + log.warn("We have stopped already. We ignore that onDataRequest call."); + return; + } + + Optional optionalNodeAddress = connection.getPeersNodeAddressOptional(); + if (optionalNodeAddress.isEmpty()) { + log.warn("Peers node address is not present, that is not expected."); + // We do not return here as in case the connection has been created from the peers side we might not + // have the address set. As we check the nonce later we do not care that much for the check if the + // connection address is the same as the one we used. + } else if (!optionalNodeAddress.get().equals(nodeAddress)) { + log.warn("Peers node address is not the same we used for the request. This is not expected. We ignore that message."); + return; + } + + GetAccountingBlocksResponse getBlocksResponse = (GetAccountingBlocksResponse) networkEnvelope; + if (getBlocksResponse.getRequestNonce() != nonce) { + log.warn("Nonce not matching. That can happen rarely if we get a response after a canceled " + + "handshake (timeout causes connection close but peer might have sent a msg before " + + "connection was closed).\n\t" + + "We drop that message. nonce={} / requestNonce={}", + nonce, getBlocksResponse.getRequestNonce()); + return; + } + + terminate(); + log.info("We received from peer {} a BlocksResponse with {} blocks", + nodeAddress.getFullAddress(), getBlocksResponse.getBlocks().size()); + listener.onComplete(getBlocksResponse); + } + } + + public void terminate() { + stopped = true; + networkNode.removeMessageListener(this); + stopTimeoutTimer(); + } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Private + /////////////////////////////////////////////////////////////////////////////////////////// + + @SuppressWarnings("UnusedParameters") + private void handleFault(String errorMessage, + NodeAddress nodeAddress, + CloseConnectionReason closeConnectionReason) { + terminate(); + peerManager.handleConnectionFault(nodeAddress); + listener.onFault(errorMessage, null); + } + + private void stopTimeoutTimer() { + if (timeoutTimer != null) { + timeoutTimer.stop(); + timeoutTimer = null; + } + } +} diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/node/messages/GetAccountingBlocksRequest.java b/core/src/main/java/bisq/core/dao/burningman/accounting/node/messages/GetAccountingBlocksRequest.java index 93a02bec08..364b169a94 100644 --- a/core/src/main/java/bisq/core/dao/burningman/accounting/node/messages/GetAccountingBlocksRequest.java +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/node/messages/GetAccountingBlocksRequest.java @@ -33,6 +33,7 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.extern.slf4j.Slf4j; +// Taken from GetBlocksRequest @EqualsAndHashCode(callSuper = true) @Getter @Slf4j diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/node/messages/GetAccountingBlocksResponse.java b/core/src/main/java/bisq/core/dao/burningman/accounting/node/messages/GetAccountingBlocksResponse.java index c7e9eead8a..81f7f48be2 100644 --- a/core/src/main/java/bisq/core/dao/burningman/accounting/node/messages/GetAccountingBlocksResponse.java +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/node/messages/GetAccountingBlocksResponse.java @@ -38,6 +38,7 @@ import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.extern.slf4j.Slf4j; +// Taken from GetBlocksResponse @EqualsAndHashCode(callSuper = true) @Getter @Slf4j From 446762f02cb61209b80d7be69a24fd4ff56f0a9a Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Mon, 21 Nov 2022 19:14:06 -0500 Subject: [PATCH 77/86] Add BM account UI --- .../resources/i18n/displayStrings.properties | 85 ++- .../desktop/main/dao/burnbsq/BurnBsqView.java | 18 +- .../burnbsq/burningman/BalanceEntryItem.java | 219 ++++++ .../BurnOutputListItem.java | 2 +- .../BurningManListItem.java} | 21 +- .../BurningManView.fxml} | 2 +- .../BurningManView.java} | 705 +++++++++++++----- .../CompensationListItem.java | 2 +- .../ReimbursementListItem.java | 2 +- 9 files changed, 836 insertions(+), 220 deletions(-) create mode 100644 desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/BalanceEntryItem.java rename desktop/src/main/java/bisq/desktop/main/dao/burnbsq/{burningmen => burningman}/BurnOutputListItem.java (97%) rename desktop/src/main/java/bisq/desktop/main/dao/burnbsq/{burningmen/BurningmenListItem.java => burningman/BurningManListItem.java} (87%) rename desktop/src/main/java/bisq/desktop/main/dao/burnbsq/{burningmen/BurningmenView.fxml => burningman/BurningManView.fxml} (97%) rename desktop/src/main/java/bisq/desktop/main/dao/burnbsq/{burningmen/BurningmenView.java => burningman/BurningManView.java} (63%) rename desktop/src/main/java/bisq/desktop/main/dao/burnbsq/{burningmen => burningman}/CompensationListItem.java (97%) rename desktop/src/main/java/bisq/desktop/main/dao/burnbsq/{burningmen => burningman}/ReimbursementListItem.java (96%) diff --git a/core/src/main/resources/i18n/displayStrings.properties b/core/src/main/resources/i18n/displayStrings.properties index 0d5827c72d..98c263565f 100644 --- a/core/src/main/resources/i18n/displayStrings.properties +++ b/core/src/main/resources/i18n/displayStrings.properties @@ -2277,40 +2277,59 @@ dao.burnBsq.assets.trialFee=Fee for trial period dao.burnBsq.assets.totalFee=Total fees paid dao.burnBsq.assets.days={0} days dao.burnBsq.assets.toFewDays=The asset fee is too low. The min. amount of days for the trial period is {0}. +dao.burningman.target.header=Burn target +dao.burningman.burn.header=Burn BSQ +dao.burningman.amount.prompt=Amount to burn +dao.burningman.amount.prompt.max=Amount to burn: {0} - {1} BSQ +dao.burningman.candidates.table.header=Burningmen candidates +dao.burningman.burnOutput.table.header=Burn outputs +dao.burningman.balanceEntry.table.header=Revenue +dao.burningman.balanceEntry.table.showMonthlyToggle=By month +dao.burningman.balanceEntry.table.radio.all=All +dao.burningman.balanceEntry.table.radio.fee=BTC fees only +dao.burningman.balanceEntry.table.radio.dpt=DPT only +dao.burningman.balanceEntry.table.radio.burn=Burned BSQ -dao.burningmen.target.header=Burn target -dao.burningmen.burn.header=Burn BSQ -dao.burningmen.amount.prompt=Amount to burn -dao.burningmen.amount.prompt.max=Amount to burn: {0} - {1} BSQ -dao.burningmen.candidates.table.header=Burningmen candidates -dao.burningmen.burnOutput.table.header=Burn outputs -dao.burningmen.compensations.table.header=Compensations -dao.burningmen.reimbursement.table.header=Reimbursement requests -dao.burningmen.expectedRevenue=Past 3-month average distribution -dao.burningmen.burnTarget.label=Amount of BSQ to burn -dao.burningmen.burnTarget.fromTo={0} - {1} BSQ -dao.burningmen.filter=Filter burningman candidates -dao.burningmen.toggle=Show only active burningmen -dao.burningmen.contributorsComboBox.prompt=Select any of my contributors -dao.burningmen.selectedContributor=Selected contributor -dao.burningmen.selectedContributorName=Contributor name -dao.burningmen.selectedContributorAddress=Receiver address -dao.burningmen.table.name=Contributor name -dao.burningmen.table.burnTarget=Burn target -dao.burningmen.table.expectedRevenue=Expected to receive -dao.burningmen.table.burnAmount=Burned amount -dao.burningmen.table.decayedBurnAmount=Decayed burned amount -dao.burningmen.table.burnAmountShare.label=Receiver share -dao.burningmen.table.burnAmountShare.capped={0} (capped from {1}) -dao.burningmen.table.numBurnOutputs=Num. Burns -dao.burningmen.table.issuanceAmount=Issued amount -dao.burningmen.table.decayedIssuanceAmount=Decayed issued amount -dao.burningmen.table.issuanceShare=Issuance share -dao.burningmen.table.numIssuances=Num. issuances -dao.burningmen.table.reimbursedAmount=Reimbursed amount -dao.burningmen.shared.table.height=Block height -dao.burningmen.shared.table.cycle=Cycle -dao.burningmen.shared.table.date=Date +dao.burningman.compensations.table.header=Compensations +dao.burningman.reimbursement.table.header=Reimbursement requests +dao.burningman.expectedRevenue=Past 3-month average distribution +dao.burningman.burnTarget.label=Amount of BSQ to burn +dao.burningman.burnTarget.fromTo={0} - {1} BSQ +dao.burningman.filter=Filter burningman candidates +dao.burningman.toggle=Show only active burningmen +dao.burningman.contributorsComboBox.prompt=Select any of my contributors +dao.burningman.selectedContributor=Selected contributor +dao.burningman.selectedContributorName=Contributor name +dao.burningman.selectedContributorAddress=Receiver address +dao.burningman.shared.table.height=Block height +dao.burningman.shared.table.cycle=Cycle +dao.burningman.shared.table.date=Date +dao.burningman.table.name=Contributor name +dao.burningman.table.burnTarget=Burn target +dao.burningman.table.expectedRevenue=Expected to receive +dao.burningman.table.burnAmount=Burned amount +dao.burningman.table.decayedBurnAmount=Decayed burned amount +dao.burningman.table.burnAmountShare.label=Receiver share +dao.burningman.table.burnAmountShare.capped={0} (capped from {1}) +dao.burningman.table.numBurnOutputs=Num. Burns +dao.burningman.table.issuanceAmount=Issued amount +dao.burningman.table.decayedIssuanceAmount=Decayed issued amount +dao.burningman.table.issuanceShare=Issuance share +dao.burningman.table.numIssuances=Num. issuances +dao.burningman.table.reimbursedAmount=Reimbursed amount +dao.burningman.table.balanceEntry.date=Date +dao.burningman.table.balanceEntry.receivedBtc=Received BTC +dao.burningman.table.balanceEntry.receivedBtcAsBsq=Received BTC as BSQ +dao.burningman.table.balanceEntry.burnedBsq=Burned BSQ +dao.burningman.table.balanceEntry.revenue=Revenue +dao.burningman.table.balanceEntry.price=BSQ/BTC price +dao.burningman.table.balanceEntry.type=Type + +# From BalanceEntry.Type enum names +dao.burningman.balanceEntry.type.UNDEFINED=Undefined +dao.burningman.balanceEntry.type.BTC_TRADE_FEE_TX=Trade fee +dao.burningman.balanceEntry.type.DPT_TX=DPT +dao.burningman.balanceEntry.type.BURN_TX=Burned BSQ # suppress inspection "UnusedProperty" dao.assetState.UNDEFINED=Undefined diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/BurnBsqView.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/BurnBsqView.java index 500c3becf1..4204c763eb 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/BurnBsqView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/BurnBsqView.java @@ -28,7 +28,7 @@ import bisq.desktop.components.MenuItem; import bisq.desktop.main.MainView; import bisq.desktop.main.dao.DaoView; import bisq.desktop.main.dao.burnbsq.assetfee.AssetFeeView; -import bisq.desktop.main.dao.burnbsq.burningmen.BurningmenView; +import bisq.desktop.main.dao.burnbsq.burningman.BurningManView; import bisq.desktop.main.dao.burnbsq.proofofburn.ProofOfBurnView; import bisq.core.locale.Res; @@ -50,7 +50,7 @@ public class BurnBsqView extends ActivatableView { private final ViewLoader viewLoader; private final Navigation navigation; - private MenuItem proofOfBurn, burningmen, assetFee; + private MenuItem proofOfBurn, burningMan, assetFee; private Navigation.Listener listener; @FXML @@ -81,17 +81,17 @@ public class BurnBsqView extends ActivatableView { List> baseNavPath = Arrays.asList(MainView.class, DaoView.class, BurnBsqView.class); proofOfBurn = new MenuItem(navigation, toggleGroup, Res.get("dao.burnBsq.menuItem.proofOfBurn"), ProofOfBurnView.class, baseNavPath); - burningmen = new MenuItem(navigation, toggleGroup, Res.get("dao.burnBsq.menuItem.burningMan"), - BurningmenView.class, baseNavPath); + burningMan = new MenuItem(navigation, toggleGroup, Res.get("dao.burnBsq.menuItem.burningMan"), + BurningManView.class, baseNavPath); assetFee = new MenuItem(navigation, toggleGroup, Res.get("dao.burnBsq.menuItem.assetFee"), AssetFeeView.class, baseNavPath); - leftVBox.getChildren().addAll(burningmen, proofOfBurn, assetFee); + leftVBox.getChildren().addAll(burningMan, proofOfBurn, assetFee); } @Override protected void activate() { proofOfBurn.activate(); - burningmen.activate(); + burningMan.activate(); assetFee.activate(); navigation.addListener(listener); @@ -99,7 +99,7 @@ public class BurnBsqView extends ActivatableView { if (viewPath.size() == 3 && viewPath.indexOf(BurnBsqView.class) == 2 || viewPath.size() == 2 && viewPath.indexOf(DaoView.class) == 1) { if (selectedViewClass == null) - selectedViewClass = BurningmenView.class; + selectedViewClass = BurningManView.class; loadView(selectedViewClass); @@ -115,7 +115,7 @@ public class BurnBsqView extends ActivatableView { navigation.removeListener(listener); proofOfBurn.deactivate(); - burningmen.deactivate(); + burningMan.deactivate(); assetFee.deactivate(); } @@ -124,7 +124,7 @@ public class BurnBsqView extends ActivatableView { content.getChildren().setAll(view.getRoot()); if (view instanceof ProofOfBurnView) toggleGroup.selectToggle(proofOfBurn); - else if (view instanceof BurningmenView) toggleGroup.selectToggle(burningmen); + else if (view instanceof BurningManView) toggleGroup.selectToggle(burningMan); else if (view instanceof AssetFeeView) toggleGroup.selectToggle(assetFee); } } diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/BalanceEntryItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/BalanceEntryItem.java new file mode 100644 index 0000000000..84b0eba5eb --- /dev/null +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/BalanceEntryItem.java @@ -0,0 +1,219 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.desktop.main.dao.burnbsq.burningman; + +import bisq.desktop.util.DisplayUtils; + +import bisq.core.dao.burningman.accounting.balance.BalanceEntry; +import bisq.core.dao.burningman.accounting.balance.BaseBalanceEntry; +import bisq.core.dao.burningman.accounting.balance.BurnedBsqBalanceEntry; +import bisq.core.dao.burningman.accounting.balance.MonthlyBalanceEntry; +import bisq.core.locale.Res; +import bisq.core.monetary.Price; +import bisq.core.util.coin.BsqFormatter; +import bisq.core.util.coin.CoinFormatter; + +import bisq.common.util.MathUtils; + +import org.bitcoinj.core.Coin; + +import com.google.common.base.Joiner; + +import java.text.SimpleDateFormat; + +import java.util.ArrayList; +import java.util.Date; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; + +@Slf4j + +@EqualsAndHashCode +class BalanceEntryItem { + private final BalanceEntry balanceEntry; + private final BsqFormatter bsqFormatter; + private final CoinFormatter btcFormatter; + @Getter + private final Date date; + @Getter + private final Date month; + @Getter + private final Optional price; + @Getter + private final Optional type; + @Getter + private final Optional receivedBtc; + @Getter + private final Optional receivedBtcAsBsq; + @Getter + private final Optional burnedBsq; + @Getter + private final Optional revenue; + + // We create the strings on demand and cache them. For large data sets it would be a bit slow otherwise. + private String monthAsString, dateAsString, receivedBtcAsString, receivedBtcAsBsqAsString, burnedBsqAsString, revenueAsString, + priceAsString, typeAsString; + + BalanceEntryItem(BalanceEntry balanceEntry, + Map averageBsqPriceByMonth, + BsqFormatter bsqFormatter, + CoinFormatter btcFormatter) { + this.balanceEntry = balanceEntry; + this.bsqFormatter = bsqFormatter; + this.btcFormatter = btcFormatter; + + date = balanceEntry.getDate(); + month = balanceEntry.getMonth(); + price = Optional.ofNullable(averageBsqPriceByMonth.get(month)); + if (balanceEntry instanceof MonthlyBalanceEntry) { + MonthlyBalanceEntry monthlyBalanceEntry = (MonthlyBalanceEntry) balanceEntry; + receivedBtc = Optional.of(monthlyBalanceEntry.getReceivedBtc()); + burnedBsq = Optional.of(-monthlyBalanceEntry.getBurnedBsq()); + type = monthlyBalanceEntry.getTypes().size() == 1 ? + Optional.of(new ArrayList<>(monthlyBalanceEntry.getTypes()).get(0)) : + Optional.empty(); + } else if (balanceEntry instanceof BurnedBsqBalanceEntry) { + BurnedBsqBalanceEntry burnedBsqBalanceEntry = (BurnedBsqBalanceEntry) balanceEntry; + receivedBtc = Optional.empty(); + burnedBsq = Optional.of(-burnedBsqBalanceEntry.getAmount()); + type = Optional.of(burnedBsqBalanceEntry.getType()); + } else { + BaseBalanceEntry baseBalanceEntry = (BaseBalanceEntry) balanceEntry; + receivedBtc = Optional.of(baseBalanceEntry.getAmount()); + burnedBsq = Optional.empty(); + type = Optional.of(baseBalanceEntry.getType()); + } + + if (price.isEmpty() || receivedBtc.isEmpty()) { + receivedBtcAsBsq = Optional.empty(); + } else { + long volume = price.get().getVolumeByAmount(Coin.valueOf(receivedBtc.get())).getValue(); + receivedBtcAsBsq = Optional.of(MathUtils.roundDoubleToLong(MathUtils.scaleDownByPowerOf10(volume, 6))); + } + + if (balanceEntry instanceof MonthlyBalanceEntry) { + revenue = Optional.of(receivedBtcAsBsq.orElse(0L) + burnedBsq.get()); + } else { + revenue = Optional.empty(); + } + } + + String getMonthAsString() { + if (monthAsString != null) { + return monthAsString; + } + + monthAsString = new SimpleDateFormat("MMM-yyyy").format(month); + return monthAsString; + } + + String getDateAsString() { + if (dateAsString != null) { + return dateAsString; + } + + dateAsString = DisplayUtils.formatDateTime(date); + return dateAsString; + } + + String getReceivedBtcAsString() { + if (receivedBtcAsString != null) { + return receivedBtcAsString; + } + + receivedBtcAsString = receivedBtc.filter(e -> e != 0).map(btcFormatter::formatCoin).orElse(""); + return receivedBtcAsString; + } + + String getReceivedBtcAsBsqAsString() { + if (receivedBtcAsBsqAsString != null) { + return receivedBtcAsBsqAsString; + } + + receivedBtcAsBsqAsString = receivedBtcAsBsq.filter(e -> e != 0).map(bsqFormatter::formatCoin).orElse(""); + return receivedBtcAsBsqAsString; + } + + String getBurnedBsqAsString() { + if (burnedBsqAsString != null) { + return burnedBsqAsString; + } + + burnedBsqAsString = burnedBsq.filter(e -> e != 0).map(bsqFormatter::formatCoin).orElse(""); + return burnedBsqAsString; + } + + String getRevenueAsString() { + if (revenueAsString != null) { + return revenueAsString; + } + + revenueAsString = revenue.filter(e -> e != 0).map(bsqFormatter::formatCoin).orElse(""); + return revenueAsString; + } + + String getPriceAsString() { + if (priceAsString != null) { + return priceAsString; + } + + priceAsString = price.map(Price::toString).orElse(""); + return priceAsString; + } + + String getTypeAsString() { + if (typeAsString != null) { + return typeAsString; + } + + if (balanceEntry instanceof MonthlyBalanceEntry) { + MonthlyBalanceEntry monthlyBalanceEntry = (MonthlyBalanceEntry) balanceEntry; + typeAsString = type.map(type -> Res.get("dao.burningman.balanceEntry.type." + type.name())) + .orElse(Joiner.on(", ") + .join(monthlyBalanceEntry.getTypes().stream() + .map(type -> Res.get("dao.burningman.balanceEntry.type." + type.name())) + .sorted() + .collect(Collectors.toList()))); + } else { + typeAsString = type.map(type -> Res.get("dao.burningman.balanceEntry.type." + type.name())).orElse(""); + } + return typeAsString; + } + + // Dummy for CSV export + @SuppressWarnings("OptionalAssignedToNull") + BalanceEntryItem() { + balanceEntry = null; + bsqFormatter = null; + btcFormatter = null; + + date = null; + type = null; + price = null; + month = null; + receivedBtc = null; + receivedBtcAsBsq = null; + burnedBsq = null; + revenue = null; + } +} diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/BurnOutputListItem.java similarity index 97% rename from desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java rename to desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/BurnOutputListItem.java index e260a1d7ca..7dc1aa3c91 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurnOutputListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/BurnOutputListItem.java @@ -15,7 +15,7 @@ * along with Bisq. If not, see . */ -package bisq.desktop.main.dao.burnbsq.burningmen; +package bisq.desktop.main.dao.burnbsq.burningman; import bisq.desktop.util.DisplayUtils; diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/BurningManListItem.java similarity index 87% rename from desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java rename to desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/BurningManListItem.java index 11800837ae..aad6dd6d5c 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/BurningManListItem.java @@ -15,7 +15,7 @@ * along with Bisq. If not, see . */ -package bisq.desktop.main.dao.burnbsq.burningmen; +package bisq.desktop.main.dao.burnbsq.burningman; import bisq.core.dao.burningman.BurningManPresentationService; import bisq.core.dao.burningman.model.BurningManCandidate; @@ -31,7 +31,7 @@ import lombok.Getter; @Getter @EqualsAndHashCode -class BurningmenListItem { +class BurningManListItem { private final BurningManCandidate burningManCandidate; private final String name, address, cappedBurnAmountShareAsString, compensationShareAsString, accumulatedDecayedBurnAmountAsBsq, burnTargetAsBsq, accumulatedBurnAmountAsBsq, @@ -41,7 +41,7 @@ class BurningmenListItem { private final int numBurnOutputs, numIssuances; private final double cappedBurnAmountShare, burnAmountShare, compensationShare; - BurningmenListItem(BurningManPresentationService burningManPresentationService, + BurningManListItem(BurningManPresentationService burningManPresentationService, String name, BurningManCandidate burningManCandidate, BsqFormatter bsqFormatter) { @@ -61,10 +61,17 @@ class BurningmenListItem { accumulatedDecayedBurnAmountAsBsq = ""; burnAmountShare = burningManCandidate.getBurnAmountShare(); - cappedBurnAmountShareAsString = FormattingUtils.formatToPercentWithSymbol(burnAmountShare); + cappedBurnAmountShare = burningManCandidate.getCappedBurnAmountShare(); - expectedRevenue = burningManPresentationService.getExpectedRevenue(burningManCandidate); + // LegacyBurningManForDPT is the one defined by DAO voting, so only that would receive BTC if new BM do not cover 100%. + if (burningManPresentationService.getLegacyBurningManForDPT().equals(burningManCandidate)) { + expectedRevenue = burningManPresentationService.getExpectedRevenue(burningManCandidate); + cappedBurnAmountShareAsString = FormattingUtils.formatToPercentWithSymbol(burnAmountShare); + } else { + expectedRevenue = 0; + cappedBurnAmountShareAsString = FormattingUtils.formatToPercentWithSymbol(0); + } expectedRevenueAsBsq = bsqFormatter.formatCoinWithCode(expectedRevenue); numBurnOutputs = burningManCandidate.getBurnOutputModels().size(); @@ -82,7 +89,7 @@ class BurningmenListItem { Tuple2 burnTargetTuple = burningManPresentationService.getCandidateBurnTarget(burningManCandidate); burnTarget = burnTargetTuple.first; maxBurnTarget = burnTargetTuple.second; - burnTargetAsBsq = Res.get("dao.burningmen.burnTarget.fromTo", bsqFormatter.formatCoin(burnTarget), bsqFormatter.formatCoin(maxBurnTarget)); + burnTargetAsBsq = Res.get("dao.burningman.burnTarget.fromTo", bsqFormatter.formatCoin(burnTarget), bsqFormatter.formatCoin(maxBurnTarget)); accumulatedBurnAmount = burningManCandidate.getAccumulatedBurnAmount(); accumulatedBurnAmountAsBsq = bsqFormatter.formatCoinWithCode(accumulatedBurnAmount); accumulatedDecayedBurnAmount = burningManCandidate.getAccumulatedDecayedBurnAmount(); @@ -90,7 +97,7 @@ class BurningmenListItem { burnAmountShare = burningManCandidate.getBurnAmountShare(); cappedBurnAmountShare = burningManCandidate.getCappedBurnAmountShare(); if (burnAmountShare != cappedBurnAmountShare) { - cappedBurnAmountShareAsString = Res.get("dao.burningmen.table.burnAmountShare.capped", + cappedBurnAmountShareAsString = Res.get("dao.burningman.table.burnAmountShare.capped", FormattingUtils.formatToPercentWithSymbol(cappedBurnAmountShare), FormattingUtils.formatToPercentWithSymbol(burnAmountShare)); } else { diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.fxml b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/BurningManView.fxml similarity index 97% rename from desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.fxml rename to desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/BurningManView.fxml index 84aaae7257..f15441148b 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.fxml +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/BurningManView.fxml @@ -20,7 +20,7 @@ - diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/BurningManView.java similarity index 63% rename from desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java rename to desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/BurningManView.java index dfd720e466..6b8b2fba80 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/BurningmenView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/BurningManView.java @@ -15,10 +15,12 @@ * along with Bisq. If not, see . */ -package bisq.desktop.main.dao.burnbsq.burningmen; +package bisq.desktop.main.dao.burnbsq.burningman; import bisq.desktop.common.view.ActivatableView; import bisq.desktop.common.view.FxmlView; +import bisq.desktop.components.AutoTooltipLabel; +import bisq.desktop.components.AutoTooltipRadioButton; import bisq.desktop.components.AutoTooltipSlideToggleButton; import bisq.desktop.components.AutoTooltipTableColumn; import bisq.desktop.components.InputTextField; @@ -33,6 +35,12 @@ import bisq.core.btc.listeners.BsqBalanceListener; import bisq.core.btc.wallet.BsqWalletService; import bisq.core.dao.DaoFacade; import bisq.core.dao.burningman.BurningManPresentationService; +import bisq.core.dao.burningman.accounting.BurningManAccountingService; +import bisq.core.dao.burningman.accounting.balance.BalanceEntry; +import bisq.core.dao.burningman.accounting.balance.BalanceModel; +import bisq.core.dao.burningman.accounting.balance.BaseBalanceEntry; +import bisq.core.dao.burningman.accounting.balance.BurnedBsqBalanceEntry; +import bisq.core.dao.burningman.accounting.balance.ReceivedBtcBalanceEntry; import bisq.core.dao.burningman.model.BurningManCandidate; import bisq.core.dao.burningman.model.LegacyBurningMan; import bisq.core.dao.governance.proofofburn.ProofOfBurnService; @@ -40,6 +48,7 @@ import bisq.core.dao.governance.proposal.TxException; import bisq.core.dao.state.DaoStateListener; import bisq.core.dao.state.model.blockchain.Block; import bisq.core.locale.Res; +import bisq.core.monetary.Price; import bisq.core.util.FormattingUtils; import bisq.core.util.ParsingUtils; import bisq.core.util.coin.BsqFormatter; @@ -53,22 +62,32 @@ import org.bitcoinj.core.Coin; import org.bitcoinj.core.InsufficientMoneyException; import org.bitcoinj.core.Transaction; +import com.googlecode.jcsv.writer.CSVEntryConverter; + import javax.inject.Inject; import javax.inject.Named; +import javafx.stage.Stage; + import javafx.scene.control.Button; import javafx.scene.control.ComboBox; import javafx.scene.control.Label; +import javafx.scene.control.RadioButton; import javafx.scene.control.ScrollPane; import javafx.scene.control.TableCell; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.TextField; +import javafx.scene.control.Toggle; +import javafx.scene.control.ToggleGroup; import javafx.scene.layout.ColumnConstraints; import javafx.scene.layout.GridPane; import javafx.scene.layout.HBox; +import javafx.scene.layout.Priority; +import javafx.scene.layout.Region; import javafx.scene.layout.VBox; +import javafx.geometry.HPos; import javafx.geometry.Insets; import javafx.beans.property.ReadOnlyObjectWrapper; @@ -83,17 +102,23 @@ import javafx.util.Callback; import javafx.util.StringConverter; import java.util.Comparator; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.function.Predicate; import java.util.stream.Collectors; +import java.util.stream.Stream; + +import javax.annotation.Nullable; import static bisq.desktop.util.FormBuilder.*; @FxmlView -public class BurningmenView extends ActivatableView implements DaoStateListener, BsqBalanceListener { +public class BurningManView extends ActivatableView implements DaoStateListener, BsqBalanceListener { private final DaoFacade daoFacade; private final BurningManPresentationService burningManPresentationService; + private final BurningManAccountingService burningManAccountingService; private final ProofOfBurnService proofOfBurnService; private final BsqWalletService bsqWalletService; private final BsqFormatter bsqFormatter; @@ -101,34 +126,43 @@ public class BurningmenView extends ActivatableView implements private final BsqValidator bsqValidator; private InputTextField amountInputTextField, burningmenFilterField; - private ComboBox contributorComboBox; - private Button burnButton; + private ComboBox contributorComboBox; + private Button burnButton, exportBalanceEntriesButton; private TitledGroupBg burnOutputsTitledGroupBg, compensationsTitledGroupBg, selectedContributorTitledGroupBg; - private AutoTooltipSlideToggleButton showOnlyActiveBurningmenToggle; + private AutoTooltipSlideToggleButton showOnlyActiveBurningmenToggle, showMonthlyBalanceEntryToggle; private TextField expectedRevenueField, selectedContributorNameField, selectedContributorAddressField, burnTargetField; + private ToggleGroup balanceEntryToggleGroup; + private HBox balanceEntryHBox; private VBox selectedContributorNameBox, selectedContributorAddressBox; - private TableView burningmenTableView; + private TableView burningManTableView; + private TableView balanceEntryTableView; private TableView burnOutputsTableView; private TableView compensationsTableView; private TableView reimbursementsTableView; - private final ObservableList burningmenObservableList = FXCollections.observableArrayList(); - private final FilteredList burningmenFilteredList = new FilteredList<>(burningmenObservableList); - private final SortedList burningmenSortedList = new SortedList<>(burningmenFilteredList); + + private final ObservableList burningManObservableList = FXCollections.observableArrayList(); + private final FilteredList burningManFilteredList = new FilteredList<>(burningManObservableList); + private final SortedList burningManSortedList = new SortedList<>(burningManFilteredList); private final ObservableList burnOutputsObservableList = FXCollections.observableArrayList(); private final SortedList burnOutputsSortedList = new SortedList<>(burnOutputsObservableList); private final ObservableList compensationObservableList = FXCollections.observableArrayList(); private final SortedList compensationSortedList = new SortedList<>(compensationObservableList); private final ObservableList reimbursementObservableList = FXCollections.observableArrayList(); private final SortedList reimbursementSortedList = new SortedList<>(reimbursementObservableList); + private final ObservableList balanceEntryObservableList = FXCollections.observableArrayList(); + private final FilteredList balanceEntryFilteredList = new FilteredList<>(balanceEntryObservableList); + private final SortedList balanceEntrySortedList = new SortedList<>(balanceEntryFilteredList); private final ChangeListener amountFocusOutListener; private final ChangeListener amountInputTextFieldListener; - private final ChangeListener burningmenSelectionListener; + private final ChangeListener burningmenSelectionListener; private final ChangeListener filterListener; - private final ChangeListener contributorsListener; + private final ChangeListener contributorsListener; + private final ChangeListener balanceEntryToggleListener; private int gridRow = 0; + private boolean showMonthlyBalanceEntries = true; /////////////////////////////////////////////////////////////////////////////////////////// @@ -136,8 +170,9 @@ public class BurningmenView extends ActivatableView implements /////////////////////////////////////////////////////////////////////////////////////////// @Inject - private BurningmenView(DaoFacade daoFacade, + private BurningManView(DaoFacade daoFacade, BurningManPresentationService burningManPresentationService, + BurningManAccountingService burningManAccountingService, ProofOfBurnService proofOfBurnService, BsqWalletService bsqWalletService, BsqFormatter bsqFormatter, @@ -145,6 +180,7 @@ public class BurningmenView extends ActivatableView implements BsqValidator bsqValidator) { this.daoFacade = daoFacade; this.burningManPresentationService = burningManPresentationService; + this.burningManAccountingService = burningManAccountingService; this.proofOfBurnService = proofOfBurnService; this.bsqWalletService = bsqWalletService; this.bsqFormatter = bsqFormatter; @@ -167,6 +203,13 @@ public class BurningmenView extends ActivatableView implements burnOutputsTableView.setManaged(isValueSet); burnOutputsTitledGroupBg.setVisible(isValueSet); burnOutputsTitledGroupBg.setManaged(isValueSet); + balanceEntryTableView.setVisible(isValueSet); + balanceEntryTableView.setManaged(isValueSet); + balanceEntryHBox.setVisible(isValueSet); + balanceEntryHBox.setManaged(isValueSet); + exportBalanceEntriesButton.setVisible(isValueSet); + exportBalanceEntriesButton.setManaged(isValueSet); + compensationsTableView.setVisible(isValueSet); compensationsTableView.setManaged(isValueSet); compensationsTitledGroupBg.setVisible(isValueSet); @@ -194,10 +237,11 @@ public class BurningmenView extends ActivatableView implements amountInputTextField.resetValidation(); String burnTarget = bsqFormatter.formatCoin(newValue.getBurnTarget()); String maxBurnTarget = bsqFormatter.formatCoin(newValue.getMaxBurnTarget()); - amountInputTextField.setPromptText(Res.get("dao.burningmen.amount.prompt.max", burnTarget, maxBurnTarget)); + amountInputTextField.setPromptText(Res.get("dao.burningman.amount.prompt.max", burnTarget, maxBurnTarget)); updateButtonState(); } }; + balanceEntryToggleListener = (observable, oldValue, newValue) -> onTypeChanged(); } @@ -222,58 +266,59 @@ public class BurningmenView extends ActivatableView implements root.setFitToWidth(true); // Burn target - TitledGroupBg targetTitledGroupBg = addTitledGroupBg(gridPane, gridRow, 2, Res.get("dao.burningmen.target.header")); + TitledGroupBg targetTitledGroupBg = addTitledGroupBg(gridPane, gridRow, 2, Res.get("dao.burningman.target.header")); GridPane.setColumnSpan(targetTitledGroupBg, 2); burnTargetField = addCompactTopLabelTextField(gridPane, ++gridRow, - Res.get("dao.burningmen.burnTarget.label"), "", Layout.FLOATING_LABEL_DISTANCE).second; + Res.get("dao.burningman.burnTarget.label"), "", Layout.FLOATING_LABEL_DISTANCE).second; Tuple3 currentBlockHeightTuple = addCompactTopLabelTextField(gridPane, gridRow, - Res.get("dao.burningmen.expectedRevenue"), "", Layout.FLOATING_LABEL_DISTANCE); + Res.get("dao.burningman.expectedRevenue"), "", Layout.FLOATING_LABEL_DISTANCE); expectedRevenueField = currentBlockHeightTuple.second; GridPane.setColumnIndex(currentBlockHeightTuple.third, 1); // Burn inputs - addTitledGroupBg(gridPane, ++gridRow, 4, Res.get("dao.burningmen.burn.header"), Layout.COMPACT_GROUP_DISTANCE); - contributorComboBox = addComboBox(gridPane, gridRow, Res.get("dao.burningmen.contributorsComboBox.prompt"), Layout.COMPACT_FIRST_ROW_AND_GROUP_DISTANCE); + addTitledGroupBg(gridPane, ++gridRow, 4, Res.get("dao.burningman.burn.header"), Layout.COMPACT_GROUP_DISTANCE); + contributorComboBox = addComboBox(gridPane, gridRow, Res.get("dao.burningman.contributorsComboBox.prompt"), Layout.COMPACT_FIRST_ROW_AND_GROUP_DISTANCE); contributorComboBox.setMaxWidth(300); contributorComboBox.setConverter(new StringConverter<>() { @Override - public String toString(BurningmenListItem item) { + public String toString(BurningManListItem item) { return item.getName(); } @Override - public BurningmenListItem fromString(String string) { + public BurningManListItem fromString(String string) { return null; } }); - amountInputTextField = addInputTextField(gridPane, ++gridRow, Res.get("dao.burningmen.amount.prompt")); + amountInputTextField = addInputTextField(gridPane, ++gridRow, Res.get("dao.burningman.amount.prompt")); burnButton = addButtonAfterGroup(gridPane, ++gridRow, Res.get("dao.proofOfBurn.burn")); // Burningmen candidates - Tuple3, HBox> burningmenTuple = addTableViewWithHeaderAndFilterField(gridPane, + Tuple3, HBox> burningmenTuple = addTableViewWithHeaderAndFilterField(gridPane, ++gridRow, - Res.get("dao.burningmen.candidates.table.header"), - Res.get("dao.burningmen.filter"), + Res.get("dao.burningman.candidates.table.header"), + Res.get("dao.burningman.filter"), 30); burningmenFilterField = burningmenTuple.first; - burningmenTableView = burningmenTuple.second; - GridPane.setColumnSpan(burningmenTableView, 2); + burningManTableView = burningmenTuple.second; + GridPane.setColumnSpan(burningManTableView, 2); createBurningmenColumns(); - burningmenTableView.setItems(burningmenSortedList); + burningManTableView.setItems(burningManSortedList); + burningManTableView.setTableMenuButtonVisible(true); HBox hBox = burningmenTuple.third; GridPane.setColumnSpan(hBox, 2); showOnlyActiveBurningmenToggle = new AutoTooltipSlideToggleButton(); - showOnlyActiveBurningmenToggle.setText(Res.get("dao.burningmen.toggle")); + showOnlyActiveBurningmenToggle.setText(Res.get("dao.burningman.toggle")); HBox.setMargin(showOnlyActiveBurningmenToggle, new Insets(-21, 0, 0, 0)); hBox.getChildren().add(2, showOnlyActiveBurningmenToggle); // Selected contributor - selectedContributorTitledGroupBg = addTitledGroupBg(gridPane, ++gridRow, 3, - Res.get("dao.burningmen.selectedContributor"), Layout.COMPACT_GROUP_DISTANCE); + selectedContributorTitledGroupBg = addTitledGroupBg(gridPane, ++gridRow, 4, + Res.get("dao.burningman.selectedContributor"), Layout.COMPACT_GROUP_DISTANCE); selectedContributorTitledGroupBg.setManaged(false); selectedContributorTitledGroupBg.setVisible(false); Tuple3 nameTuple = addCompactTopLabelTextField(gridPane, ++gridRow, - Res.get("dao.burningmen.selectedContributorName"), "", + Res.get("dao.burningman.selectedContributorName"), "", Layout.COMPACT_GROUP_DISTANCE + Layout.FLOATING_LABEL_DISTANCE); selectedContributorNameField = nameTuple.second; selectedContributorNameBox = nameTuple.third; @@ -281,7 +326,7 @@ public class BurningmenView extends ActivatableView implements selectedContributorNameBox.setVisible(false); Tuple3 addressTuple = addCompactTopLabelTextField(gridPane, gridRow, - Res.get("dao.burningmen.selectedContributorAddress"), "", + Res.get("dao.burningman.selectedContributorAddress"), "", Layout.COMPACT_GROUP_DISTANCE + Layout.FLOATING_LABEL_DISTANCE); selectedContributorAddressField = addressTuple.second; selectedContributorAddressBox = addressTuple.third; @@ -290,9 +335,61 @@ public class BurningmenView extends ActivatableView implements selectedContributorAddressBox.setManaged(false); selectedContributorAddressBox.setVisible(false); + // BalanceEntry + TitledGroupBg balanceEntryTitledGroupBg = new TitledGroupBg(); + balanceEntryTitledGroupBg.setText(Res.get("dao.burningman.balanceEntry.table.header")); + + showMonthlyBalanceEntryToggle = new AutoTooltipSlideToggleButton(); + showMonthlyBalanceEntryToggle.setText(Res.get("dao.burningman.balanceEntry.table.showMonthlyToggle")); + HBox.setMargin(showMonthlyBalanceEntryToggle, new Insets(-21, 0, 0, 0)); + showMonthlyBalanceEntryToggle.setSelected(true); + + balanceEntryToggleGroup = new ToggleGroup(); + RadioButton balanceEntryShowAllRadioButton = getRadioButton(Res.get("dao.burningman.balanceEntry.table.radio.all"), null); + RadioButton balanceEntryShowFeeRadioButton = getRadioButton(Res.get("dao.burningman.balanceEntry.table.radio.fee"), BalanceEntry.Type.BTC_TRADE_FEE_TX); + RadioButton balanceEntryShowDptRadioButton = getRadioButton(Res.get("dao.burningman.balanceEntry.table.radio.dpt"), BalanceEntry.Type.DPT_TX); + RadioButton balanceEntryShowBurnRadioButton = getRadioButton(Res.get("dao.burningman.balanceEntry.table.radio.burn"), BalanceEntry.Type.BURN_TX); + balanceEntryToggleGroup.selectToggle(balanceEntryShowAllRadioButton); + + Region spacer = new Region(); + balanceEntryHBox = new HBox(20, + balanceEntryTitledGroupBg, + spacer, + showMonthlyBalanceEntryToggle, + balanceEntryShowAllRadioButton, + balanceEntryShowFeeRadioButton, + balanceEntryShowDptRadioButton, + balanceEntryShowBurnRadioButton); + HBox.setHgrow(spacer, Priority.ALWAYS); + balanceEntryHBox.setVisible(false); + balanceEntryHBox.setManaged(false); + balanceEntryHBox.prefWidthProperty().bind(gridPane.widthProperty()); + GridPane.setRowIndex(balanceEntryHBox, ++gridRow); + GridPane.setColumnSpan(balanceEntryHBox, 2); + GridPane.setMargin(balanceEntryHBox, new Insets(38, -10, -12, -10)); + gridPane.getChildren().add(balanceEntryHBox); + + balanceEntryTableView = new TableView<>(); + GridPane.setColumnSpan(balanceEntryTableView, 2); + GridPane.setRowIndex(balanceEntryTableView, gridRow); + GridPane.setMargin(balanceEntryTableView, new Insets(60, -10, 5, -10)); + gridPane.getChildren().add(balanceEntryTableView); + balanceEntryTableView.setPlaceholder(new AutoTooltipLabel(Res.get("table.placeholder.noData"))); + balanceEntryTableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY); + createBalanceEntryColumns(); + balanceEntryTableView.setItems(balanceEntrySortedList); + balanceEntryTableView.setVisible(false); + balanceEntryTableView.setManaged(false); + + exportBalanceEntriesButton = FormBuilder.addButton(gridPane, ++gridRow, Res.get("shared.exportCSV")); + GridPane.setColumnIndex(exportBalanceEntriesButton, 1); + GridPane.setHalignment(exportBalanceEntriesButton, HPos.RIGHT); + exportBalanceEntriesButton.setVisible(false); + exportBalanceEntriesButton.setManaged(false); + // BurnOutputs Tuple2, TitledGroupBg> burnOutputTuple = addTableViewWithHeader(gridPane, ++gridRow, - Res.get("dao.burningmen.burnOutput.table.header"), 30); + Res.get("dao.burningman.burnOutput.table.header"), 30); burnOutputsTableView = burnOutputTuple.first; GridPane.setMargin(burnOutputsTableView, new Insets(60, 0, 5, -10)); createBurnOutputsColumns(); @@ -305,7 +402,7 @@ public class BurningmenView extends ActivatableView implements // Compensations Tuple2, TitledGroupBg> compensationTuple = addTableViewWithHeader(gridPane, gridRow, - Res.get("dao.burningmen.compensations.table.header"), 30); + Res.get("dao.burningman.compensations.table.header"), 30); compensationsTableView = compensationTuple.first; GridPane.setMargin(compensationsTableView, new Insets(60, -10, 5, 0)); GridPane.setColumnIndex(compensationsTableView, 1); @@ -320,15 +417,23 @@ public class BurningmenView extends ActivatableView implements // Reimbursements reimbursementsTableView = FormBuilder.addTableViewWithHeader(gridPane, ++gridRow, - Res.get("dao.burningmen.reimbursement.table.header"), 30).first; + Res.get("dao.burningman.reimbursement.table.header"), 30).first; GridPane.setColumnSpan(reimbursementsTableView, 2); createReimbursementColumns(); reimbursementsTableView.setItems(reimbursementSortedList); } + private RadioButton getRadioButton(String title, @Nullable BalanceEntry.Type type) { + AutoTooltipRadioButton radioButton = new AutoTooltipRadioButton(title); + radioButton.setToggleGroup(balanceEntryToggleGroup); + radioButton.setUserData(type); + HBox.setMargin(radioButton, new Insets(-12, 2, 0, 0)); + return radioButton; + } + @Override protected void activate() { - GUIUtil.setFitToRowsForTableView(burningmenTableView, 36, 28, 10, 15); + GUIUtil.setFitToRowsForTableView(burningManTableView, 36, 28, 10, 10); GUIUtil.setFitToRowsForTableView(reimbursementsTableView, 36, 28, 3, 6); daoFacade.addBsqStateListener(this); @@ -338,39 +443,23 @@ public class BurningmenView extends ActivatableView implements amountInputTextField.focusedProperty().addListener(amountFocusOutListener); burningmenFilterField.textProperty().addListener(filterListener); - burningmenTableView.getSelectionModel().selectedItemProperty().addListener(burningmenSelectionListener); + burningManTableView.getSelectionModel().selectedItemProperty().addListener(burningmenSelectionListener); contributorComboBox.getSelectionModel().selectedItemProperty().addListener(contributorsListener); - burningmenSortedList.comparatorProperty().bind(burningmenTableView.comparatorProperty()); + balanceEntryToggleGroup.selectedToggleProperty().addListener(balanceEntryToggleListener); + + burningManSortedList.comparatorProperty().bind(burningManTableView.comparatorProperty()); burnOutputsSortedList.comparatorProperty().bind(burnOutputsTableView.comparatorProperty()); + balanceEntrySortedList.comparatorProperty().bind(balanceEntryTableView.comparatorProperty()); compensationSortedList.comparatorProperty().bind(compensationsTableView.comparatorProperty()); reimbursementSortedList.comparatorProperty().bind(reimbursementsTableView.comparatorProperty()); - burnButton.setOnAction((event) -> { - BurningmenListItem selectedItem = contributorComboBox.getSelectionModel().getSelectedItem(); - if (selectedItem != null) { - Coin amount = getAmountFee(); - String name = selectedItem.getName(); - try { - Transaction transaction = proofOfBurnService.burn(name, amount.value); - Coin miningFee = transaction.getFee(); - int txVsize = transaction.getVsize(); - - if (!DevEnv.isDevMode()) { - GUIUtil.showBsqFeeInfoPopup(amount, miningFee, txVsize, bsqFormatter, btcFormatter, - Res.get("dao.proofOfBurn.header"), () -> doPublishFeeTx(transaction, name)); - } else { - doPublishFeeTx(transaction, name); - } - } catch (InsufficientMoneyException | TxException e) { - e.printStackTrace(); - new Popup().error(e.toString()).show(); - } - } - }); + burnButton.setOnAction(e -> onBurn()); + exportBalanceEntriesButton.setOnAction(event -> onExportBalanceEntries()); showOnlyActiveBurningmenToggle.setOnAction(e -> updateBurningmenPredicate()); + showMonthlyBalanceEntryToggle.setOnAction(e -> onShowMonthly(showMonthlyBalanceEntryToggle.isSelected())); amountInputTextField.setValidator(bsqValidator); @@ -393,17 +482,22 @@ public class BurningmenView extends ActivatableView implements amountInputTextField.focusedProperty().removeListener(amountFocusOutListener); burningmenFilterField.textProperty().removeListener(filterListener); - burningmenTableView.getSelectionModel().selectedItemProperty().removeListener(burningmenSelectionListener); + burningManTableView.getSelectionModel().selectedItemProperty().removeListener(burningmenSelectionListener); contributorComboBox.getSelectionModel().selectedItemProperty().removeListener(contributorsListener); - burningmenSortedList.comparatorProperty().unbind(); + balanceEntryToggleGroup.selectedToggleProperty().removeListener(balanceEntryToggleListener); + + burningManSortedList.comparatorProperty().unbind(); burnOutputsSortedList.comparatorProperty().unbind(); + balanceEntrySortedList.comparatorProperty().unbind(); compensationSortedList.comparatorProperty().unbind(); reimbursementSortedList.comparatorProperty().unbind(); burnButton.setOnAction(null); + exportBalanceEntriesButton.setOnAction(null); showOnlyActiveBurningmenToggle.setOnAction(null); + showMonthlyBalanceEntryToggle.setOnAction(null); } @@ -443,17 +537,17 @@ public class BurningmenView extends ActivatableView implements /////////////////////////////////////////////////////////////////////////////////////////// private void updateData() { - burningmenObservableList.setAll(burningManPresentationService.getBurningManCandidatesByName().entrySet().stream() - .map(entry -> new BurningmenListItem(burningManPresentationService, entry.getKey(), entry.getValue(), bsqFormatter)) + burningManObservableList.setAll(burningManPresentationService.getBurningManCandidatesByName().entrySet().stream() + .map(entry -> new BurningManListItem(burningManPresentationService, entry.getKey(), entry.getValue(), bsqFormatter)) .collect(Collectors.toList())); - burningmenObservableList.add(new BurningmenListItem(burningManPresentationService, - BurningManPresentationService.LEGACY_BURNING_MAN_BTC_FEES_NAME, - burningManPresentationService.getLegacyBurningManForBtcFees(), - bsqFormatter)); - burningmenObservableList.add(new BurningmenListItem(burningManPresentationService, + burningManObservableList.add(new BurningManListItem(burningManPresentationService, BurningManPresentationService.LEGACY_BURNING_MAN_DPT_NAME, burningManPresentationService.getLegacyBurningManForDPT(), bsqFormatter)); + burningManObservableList.add(new BurningManListItem(burningManPresentationService, + BurningManPresentationService.LEGACY_BURNING_MAN_BTC_FEES_NAME, + burningManPresentationService.getLegacyBurningManForBtcFees(), + bsqFormatter)); reimbursementObservableList.setAll(burningManPresentationService.getReimbursements().stream() .map(reimbursementModel -> new ReimbursementListItem(reimbursementModel, bsqFormatter)) .collect(Collectors.toList())); @@ -462,45 +556,96 @@ public class BurningmenView extends ActivatableView implements String burnTarget = bsqFormatter.formatCoin(burningManPresentationService.getBurnTarget()); String boostedBurnTarget = bsqFormatter.formatCoin(burningManPresentationService.getBoostedBurnTarget()); - burnTargetField.setText(Res.get("dao.burningmen.burnTarget.fromTo", burnTarget, boostedBurnTarget)); + burnTargetField.setText(Res.get("dao.burningman.burnTarget.fromTo", burnTarget, boostedBurnTarget)); if (daoFacade.isParseBlockChainComplete()) { Set myContributorNames = burningManPresentationService.getMyCompensationRequestNames(); burningManPresentationService.findMyGenesisOutputNames().ifPresent(myContributorNames::addAll); - - Map burningmenListItemByName = burningmenObservableList.stream() - .collect(Collectors.toMap(BurningmenListItem::getName, e -> e)); - List myBurningmenListItems = myContributorNames.stream() + Map burningmenListItemByName = burningManObservableList.stream() + .collect(Collectors.toMap(BurningManListItem::getName, e -> e)); + List myBurningManListItems = myContributorNames.stream() .filter(burningmenListItemByName::containsKey) .map(burningmenListItemByName::get) - .sorted(Comparator.comparing(BurningmenListItem::getName)) + .sorted(Comparator.comparing(BurningManListItem::getName)) .collect(Collectors.toList()); - contributorComboBox.setItems(FXCollections.observableArrayList(myBurningmenListItems)); + contributorComboBox.setItems(FXCollections.observableArrayList(myBurningManListItems)); + } + } + + private void onShowMonthly(boolean value) { + showMonthlyBalanceEntries = value; + BurningManListItem selectedItem = burningManTableView.getSelectionModel().getSelectedItem(); + if (selectedItem != null) { + onBurningManSelected(selectedItem); } } private void updateBurningmenPredicate() { - burningmenFilteredList.setPredicate(burningmenListItem -> { + burningManFilteredList.setPredicate(burningManListItem -> { boolean showOnlyActiveBurningmen = showOnlyActiveBurningmenToggle.isSelected(); String filterText = burningmenFilterField.getText(); - boolean activeBurnerOrShowAll = !showOnlyActiveBurningmen || burningmenListItem.getCappedBurnAmountShare() > 0; + boolean activeBurnerOrShowAll = !showOnlyActiveBurningmen || burningManListItem.getCappedBurnAmountShare() > 0; if (filterText == null || filterText.trim().isEmpty()) { return activeBurnerOrShowAll; } else { - return activeBurnerOrShowAll && burningmenListItem.getName().toLowerCase().contains(filterText.toLowerCase()); + return activeBurnerOrShowAll && burningManListItem.getName().toLowerCase().contains(filterText.toLowerCase()); } }); } - private void onBurningManSelected(BurningmenListItem burningmenListItem) { - selectedContributorNameField.setText(burningmenListItem.getName()); - selectedContributorAddressField.setText(burningmenListItem.getAddress()); - BurningManCandidate burningManCandidate = burningmenListItem.getBurningManCandidate(); + private void onTypeChanged() { + if (showMonthlyBalanceEntries) { + BurningManListItem selectedItem = burningManTableView.getSelectionModel().getSelectedItem(); + if (selectedItem != null) { + onBurningManSelected(selectedItem); + } + } + balanceEntryFilteredList.setPredicate(balanceEntryItem -> { + BalanceEntry.Type userData = (BalanceEntry.Type) balanceEntryToggleGroup.getSelectedToggle().getUserData(); + return showMonthlyBalanceEntries || userData == null || balanceEntryItem.getType().orElse(null) == userData; + }); + } + + private void onBurningManSelected(BurningManListItem burningManListItem) { + String name = burningManListItem.getName(); + selectedContributorNameField.setText(name); + selectedContributorAddressField.setText(burningManListItem.getAddress()); + BurningManCandidate burningManCandidate = burningManListItem.getBurningManCandidate(); + boolean isLegacyBurningMan = burningManCandidate instanceof LegacyBurningMan; burnOutputsObservableList.setAll(burningManCandidate.getBurnOutputModels().stream() .map(burnOutputModel -> new BurnOutputListItem(burnOutputModel, bsqFormatter, isLegacyBurningMan)) .collect(Collectors.toList())); GUIUtil.setFitToRowsForTableView(burnOutputsTableView, 36, 28, 4, 6); + + if (burningManAccountingService.getBalanceModelByBurningManName().containsKey(name)) { + BalanceModel balanceModel = burningManAccountingService.getBalanceModelByBurningManName().get(name); + List balanceEntries; + if (showMonthlyBalanceEntries) { + Predicate predicate = balanceEntry -> { + BalanceEntry.Type selectedType = (BalanceEntry.Type) balanceEntryToggleGroup.getSelectedToggle().getUserData(); + return selectedType == null || + selectedType.equals(balanceEntry.getType()); + }; + balanceEntries = balanceModel.getMonthlyBalanceEntries(burningManCandidate, predicate); + } else { + Stream receivedBtcBalanceEntries = balanceModel.getReceivedBtcBalanceEntries().stream(); + Stream burnedBsqBalanceEntries = balanceModel.getBurnedBsqBalanceEntries(burningManCandidate.getBurnOutputModels()); + balanceEntries = Stream.concat(receivedBtcBalanceEntries, burnedBsqBalanceEntries).collect(Collectors.toList()); + } + + Map averageBsqPriceByMonth = burningManAccountingService.getAverageBsqPriceByMonth(); + long ts = System.currentTimeMillis(); + balanceEntryObservableList.setAll(balanceEntries.stream() + .map(balanceEntry -> new BalanceEntryItem(balanceEntry, averageBsqPriceByMonth, bsqFormatter, btcFormatter)) + .collect(Collectors.toList())); + // 108869: 617 - 1878, 640-1531 + log.error("balanceEntryObservableList setAll took {} ms size={}", System.currentTimeMillis() - ts, balanceEntryObservableList.size()); + } else { + balanceEntryObservableList.clear(); + } + GUIUtil.setFitToRowsForTableView(balanceEntryTableView, 36, 28, 4, 6); + compensationObservableList.setAll(burningManCandidate.getCompensationModels().stream() .map(compensationModel -> new CompensationListItem(compensationModel, bsqFormatter)) .collect(Collectors.toList())); @@ -513,6 +658,29 @@ public class BurningmenView extends ActivatableView implements burnButton.setDisable(!isValid); } + private void onBurn() { + BurningManListItem selectedItem = contributorComboBox.getSelectionModel().getSelectedItem(); + if (selectedItem != null) { + Coin amount = getAmountFee(); + String name = selectedItem.getName(); + try { + Transaction transaction = proofOfBurnService.burn(name, amount.value); + Coin miningFee = transaction.getFee(); + int txVsize = transaction.getVsize(); + + if (!DevEnv.isDevMode()) { + GUIUtil.showBsqFeeInfoPopup(amount, miningFee, txVsize, bsqFormatter, btcFormatter, + Res.get("dao.proofOfBurn.header"), () -> doPublishFeeTx(transaction, name)); + } else { + doPublishFeeTx(transaction, name); + } + } catch (InsufficientMoneyException | TxException e) { + e.printStackTrace(); + new Popup().error(e.toString()).show(); + } + } + } + private Coin getAmountFee() { return ParsingUtils.parseToCoin(amountInputTextField.getText(), bsqFormatter); } @@ -526,30 +694,55 @@ public class BurningmenView extends ActivatableView implements errorMessage -> new Popup().warning(errorMessage).show()); amountInputTextField.clear(); - amountInputTextField.setPromptText(Res.get("dao.burningmen.amount.prompt")); + amountInputTextField.setPromptText(Res.get("dao.burningman.amount.prompt")); amountInputTextField.resetValidation(); contributorComboBox.getSelectionModel().clearSelection(); } + private void onExportBalanceEntries() { + CSVEntryConverter headerConverter = item -> { + ObservableList> tableColumns = balanceEntryTableView.getColumns(); + String[] columns = new String[tableColumns.size()]; + for (int i = 0; i < tableColumns.size(); i++) { + columns[i] = ((AutoTooltipLabel) tableColumns.get(i).getGraphic()).getText(); + } + return columns; + }; + CSVEntryConverter contentConverter = item -> { + String[] columns = new String[7]; + columns[0] = item.getDateAsString(); + columns[1] = item.getReceivedBtcAsString(); + columns[2] = item.getPriceAsString(); + columns[3] = item.getReceivedBtcAsBsqAsString(); + columns[4] = item.getBurnedBsqAsString(); + columns[5] = item.getRevenueAsString(); + columns[6] = item.getTypeAsString(); + return columns; + }; + + GUIUtil.exportCSV("burningman_revenue.csv", headerConverter, contentConverter, + new BalanceEntryItem(), balanceEntryObservableList, (Stage) root.getScene().getWindow()); + } + /////////////////////////////////////////////////////////////////////////////////////////// // Table columns /////////////////////////////////////////////////////////////////////////////////////////// private void createBurningmenColumns() { - TableColumn column; + TableColumn column; - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.name")); - column.setMinWidth(140); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.name")); + column.setMinWidth(170); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.getStyleClass().add("first-column"); column.setCellFactory(new Callback<>() { @Override - public TableCell call(TableColumn column) { + public TableCell call(TableColumn column) { return new TableCell<>() { @Override - public void updateItem(final BurningmenListItem item, boolean empty) { + public void updateItem(final BurningManListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { setMinHeight(36); @@ -560,20 +753,20 @@ public class BurningmenView extends ActivatableView implements }; } }); - burningmenTableView.getColumns().add(column); + burningManTableView.getColumns().add(column); column.setComparator(Comparator.comparing(e -> e.getName().toLowerCase())); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.burnTarget")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.burnTarget")); column.setMinWidth(200); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override - public TableCell call(TableColumn column) { + public TableCell call(TableColumn column) { return new TableCell<>() { @Override - public void updateItem(final BurningmenListItem item, boolean empty) { + public void updateItem(final BurningManListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { setText(item.getBurnTargetAsBsq()); @@ -583,20 +776,20 @@ public class BurningmenView extends ActivatableView implements }; } }); - burningmenTableView.getColumns().add(column); - column.setComparator(Comparator.comparing(BurningmenListItem::getBurnTarget)); + burningManTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurningManListItem::getBurnTarget)); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.expectedRevenue")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.expectedRevenue")); column.setMinWidth(140); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override - public TableCell call(TableColumn column) { + public TableCell call(TableColumn column) { return new TableCell<>() { @Override - public void updateItem(final BurningmenListItem item, boolean empty) { + public void updateItem(final BurningManListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { setText(item.getExpectedRevenueAsBsq()); @@ -606,22 +799,22 @@ public class BurningmenView extends ActivatableView implements }; } }); - burningmenTableView.getColumns().add(column); - column.setComparator(Comparator.comparing(BurningmenListItem::getExpectedRevenue)); + burningManTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurningManListItem::getExpectedRevenue)); column.setSortType(TableColumn.SortType.DESCENDING); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.burnAmountShare.label")); - column.setMinWidth(220); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.burnAmountShare.label")); + column.setMinWidth(230); column.setMaxWidth(column.getMinWidth()); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override - public TableCell call(TableColumn column) { + public TableCell call(TableColumn column) { return new TableCell<>() { @Override - public void updateItem(final BurningmenListItem item, boolean empty) { + public void updateItem(final BurningManListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { setText(item.getCappedBurnAmountShareAsString()); @@ -631,22 +824,22 @@ public class BurningmenView extends ActivatableView implements }; } }); - burningmenTableView.getColumns().add(column); + burningManTableView.getColumns().add(column); column.setSortType(TableColumn.SortType.DESCENDING); - column.setComparator(Comparator.comparing(BurningmenListItem::getCappedBurnAmountShare)); - burningmenTableView.getSortOrder().add(column); + column.setComparator(Comparator.comparing(BurningManListItem::getCappedBurnAmountShare)); + burningManTableView.getSortOrder().add(column); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.decayedBurnAmount")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.decayedBurnAmount")); column.setMinWidth(160); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override - public TableCell call(TableColumn column) { + public TableCell call(TableColumn column) { return new TableCell<>() { @Override - public void updateItem(final BurningmenListItem item, boolean empty) { + public void updateItem(final BurningManListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { setText(item.getAccumulatedDecayedBurnAmountAsBsq()); @@ -656,21 +849,21 @@ public class BurningmenView extends ActivatableView implements }; } }); - burningmenTableView.getColumns().add(column); - column.setComparator(Comparator.comparing(BurningmenListItem::getAccumulatedDecayedBurnAmount)); + burningManTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurningManListItem::getAccumulatedDecayedBurnAmount)); column.setSortType(TableColumn.SortType.DESCENDING); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.burnAmount")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.burnAmount")); column.setMinWidth(130); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override - public TableCell call(TableColumn column) { + public TableCell call(TableColumn column) { return new TableCell<>() { @Override - public void updateItem(final BurningmenListItem item, boolean empty) { + public void updateItem(final BurningManListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { setText(item.getAccumulatedBurnAmountAsBsq()); @@ -680,22 +873,22 @@ public class BurningmenView extends ActivatableView implements }; } }); - burningmenTableView.getColumns().add(column); - column.setComparator(Comparator.comparing(BurningmenListItem::getAccumulatedBurnAmount)); + burningManTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurningManListItem::getAccumulatedBurnAmount)); column.setSortType(TableColumn.SortType.DESCENDING); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.numBurnOutputs")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.numBurnOutputs")); column.setMinWidth(90); column.setMaxWidth(column.getMinWidth()); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override - public TableCell call(TableColumn column) { + public TableCell call(TableColumn column) { return new TableCell<>() { @Override - public void updateItem(final BurningmenListItem item, boolean empty) { + public void updateItem(final BurningManListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { setText(String.valueOf(item.getNumBurnOutputs())); @@ -705,21 +898,21 @@ public class BurningmenView extends ActivatableView implements }; } }); - burningmenTableView.getColumns().add(column); - column.setComparator(Comparator.comparing(BurningmenListItem::getNumBurnOutputs)); + burningManTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurningManListItem::getNumBurnOutputs)); column.setSortType(TableColumn.SortType.DESCENDING); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.issuanceShare")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.issuanceShare")); column.setMinWidth(110); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override - public TableCell call(TableColumn column) { + public TableCell call(TableColumn column) { return new TableCell<>() { @Override - public void updateItem(final BurningmenListItem item, boolean empty) { + public void updateItem(final BurningManListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { setText(item.getCompensationShareAsString()); @@ -729,21 +922,21 @@ public class BurningmenView extends ActivatableView implements }; } }); - burningmenTableView.getColumns().add(column); - column.setComparator(Comparator.comparing(BurningmenListItem::getCompensationShare)); + burningManTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurningManListItem::getCompensationShare)); column.setSortType(TableColumn.SortType.DESCENDING); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.decayedIssuanceAmount")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.decayedIssuanceAmount")); column.setMinWidth(140); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override - public TableCell call(TableColumn column) { + public TableCell call(TableColumn column) { return new TableCell<>() { @Override - public void updateItem(final BurningmenListItem item, boolean empty) { + public void updateItem(final BurningManListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { setText(item.getAccumulatedDecayedCompensationAmountAsBsq()); @@ -753,21 +946,21 @@ public class BurningmenView extends ActivatableView implements }; } }); - burningmenTableView.getColumns().add(column); - column.setComparator(Comparator.comparing(BurningmenListItem::getAccumulatedDecayedCompensationAmount)); + burningManTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurningManListItem::getAccumulatedDecayedCompensationAmount)); column.setSortType(TableColumn.SortType.DESCENDING); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.issuanceAmount")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.issuanceAmount")); column.setMinWidth(120); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override - public TableCell call(TableColumn column) { + public TableCell call(TableColumn column) { return new TableCell<>() { @Override - public void updateItem(final BurningmenListItem item, boolean empty) { + public void updateItem(final BurningManListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { setText(item.getAccumulatedCompensationAmountAsBsq()); @@ -777,22 +970,22 @@ public class BurningmenView extends ActivatableView implements }; } }); - burningmenTableView.getColumns().add(column); - column.setComparator(Comparator.comparing(BurningmenListItem::getAccumulatedCompensationAmount)); + burningManTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurningManListItem::getAccumulatedCompensationAmount)); column.setSortType(TableColumn.SortType.DESCENDING); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.numIssuances")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.numIssuances")); column.setMinWidth(110); column.setMaxWidth(column.getMinWidth()); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @Override - public TableCell call(TableColumn column) { + public TableCell call(TableColumn column) { return new TableCell<>() { @Override - public void updateItem(final BurningmenListItem item, boolean empty) { + public void updateItem(final BurningManListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { setText(item.getNumIssuancesAsString()); @@ -802,16 +995,17 @@ public class BurningmenView extends ActivatableView implements }; } }); - burningmenTableView.getColumns().add(column); - column.setComparator(Comparator.comparing(BurningmenListItem::getNumIssuances)); + burningManTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(BurningManListItem::getNumIssuances)); column.setSortType(TableColumn.SortType.DESCENDING); } private void createBurnOutputsColumns() { TableColumn column; - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.date")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.shared.table.date")); column.setMinWidth(160); + column.setMaxWidth(column.getMinWidth()); column.getStyleClass().add("first-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @@ -836,7 +1030,7 @@ public class BurningmenView extends ActivatableView implements column.setComparator(Comparator.comparing(BurnOutputListItem::getDate)); burnOutputsTableView.getSortOrder().add(column); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.cycle")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.shared.table.cycle")); column.setMinWidth(60); column.setMaxWidth(column.getMinWidth()); column.getStyleClass().add("last-column"); @@ -861,7 +1055,7 @@ public class BurningmenView extends ActivatableView implements column.setComparator(Comparator.comparing(BurnOutputListItem::getCycleIndex)); column.setSortType(TableColumn.SortType.DESCENDING); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.height")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.shared.table.height")); column.setMinWidth(90); column.setMaxWidth(column.getMinWidth()); column.getStyleClass().add("last-column"); @@ -886,7 +1080,7 @@ public class BurningmenView extends ActivatableView implements column.setComparator(Comparator.comparing(BurnOutputListItem::getHeight)); column.setSortType(TableColumn.SortType.DESCENDING); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.decayedBurnAmount")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.decayedBurnAmount")); column.setMinWidth(160); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); @@ -910,7 +1104,7 @@ public class BurningmenView extends ActivatableView implements column.setComparator(Comparator.comparing(BurnOutputListItem::getDecayedAmount)); column.setSortType(TableColumn.SortType.DESCENDING); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.burnAmount")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.burnAmount")); column.setMinWidth(140); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); @@ -935,11 +1129,187 @@ public class BurningmenView extends ActivatableView implements column.setSortType(TableColumn.SortType.DESCENDING); } + private void createBalanceEntryColumns() { + TableColumn column; + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.balanceEntry.date")); + column.setMinWidth(160); + column.getStyleClass().add("first-column"); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BalanceEntryItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setMinHeight(36); + setText(showMonthlyBalanceEntries ? item.getMonthAsString() : item.getDateAsString()); + } else + setText(""); + } + }; + } + }); + balanceEntryTableView.getColumns().add(column); + column.setSortType(TableColumn.SortType.DESCENDING); + column.setComparator(Comparator.comparing(BalanceEntryItem::getDate)); + balanceEntryTableView.getSortOrder().add(column); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.balanceEntry.receivedBtc")); + column.setMinWidth(100); + column.getStyleClass().add("last-column"); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BalanceEntryItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(item.getReceivedBtcAsString()); + } else + setText(""); + } + }; + } + }); + balanceEntryTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(e -> e.getReceivedBtc().orElse(null))); + column.setSortType(TableColumn.SortType.DESCENDING); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.balanceEntry.price")); + column.setMinWidth(160); + column.getStyleClass().add("last-column"); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BalanceEntryItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(item.getPriceAsString()); + } else + setText(""); + } + }; + } + }); + balanceEntryTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(e -> e.getPrice().orElse(null))); + column.setSortType(TableColumn.SortType.DESCENDING); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.balanceEntry.receivedBtcAsBsq")); + column.setMinWidth(100); + column.getStyleClass().add("last-column"); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BalanceEntryItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(String.valueOf(item.getReceivedBtcAsBsqAsString())); + } else + setText(""); + } + }; + } + }); + balanceEntryTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(e -> e.getReceivedBtcAsBsq().orElse(null))); + column.setSortType(TableColumn.SortType.DESCENDING); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.balanceEntry.burnedBsq")); + column.setMinWidth(100); + column.getStyleClass().add("last-column"); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BalanceEntryItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(String.valueOf(item.getBurnedBsqAsString())); + } else + setText(""); + } + }; + } + }); + balanceEntryTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(e -> e.getBurnedBsq().orElse(null))); + column.setSortType(TableColumn.SortType.DESCENDING); + + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.balanceEntry.revenue")); + column.setMinWidth(100); + column.getStyleClass().add("last-column"); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BalanceEntryItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(String.valueOf(item.getRevenueAsString())); + } else + setText(""); + } + }; + } + }); + balanceEntryTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(e -> e.getRevenue().orElse(null))); + column.setSortType(TableColumn.SortType.DESCENDING); + + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.balanceEntry.type")); + column.setMinWidth(140); + column.getStyleClass().add("last-column"); + column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); + column.setCellFactory(new Callback<>() { + @Override + public TableCell call(TableColumn column) { + return new TableCell<>() { + @Override + public void updateItem(final BalanceEntryItem item, boolean empty) { + super.updateItem(item, empty); + if (item != null && !empty) { + setText(item.getTypeAsString()); + } else + setText(""); + } + }; + } + }); + balanceEntryTableView.getColumns().add(column); + column.setComparator(Comparator.comparing(e -> e.getType().orElse(null))); + column.setSortType(TableColumn.SortType.DESCENDING); + } + private void createCompensationColumns() { TableColumn column; - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.date")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.shared.table.date")); column.setMinWidth(160); + column.setMaxWidth(column.getMinWidth()); column.getStyleClass().add("first-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); @@ -965,7 +1335,7 @@ public class BurningmenView extends ActivatableView implements column.setComparator(Comparator.comparing(CompensationListItem::getDate)); compensationsTableView.getSortOrder().add(column); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.cycle")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.shared.table.cycle")); column.setMinWidth(60); column.setMaxWidth(column.getMinWidth()); column.getStyleClass().add("last-column"); @@ -990,7 +1360,7 @@ public class BurningmenView extends ActivatableView implements column.setComparator(Comparator.comparing(CompensationListItem::getCycleIndex)); column.setSortType(TableColumn.SortType.DESCENDING); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.height")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.shared.table.height")); column.setMinWidth(90); column.setMaxWidth(column.getMinWidth()); column.getStyleClass().add("last-column"); @@ -1015,7 +1385,7 @@ public class BurningmenView extends ActivatableView implements column.setComparator(Comparator.comparing(CompensationListItem::getHeight)); column.setSortType(TableColumn.SortType.DESCENDING); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.decayedIssuanceAmount")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.decayedIssuanceAmount")); column.setMinWidth(160); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); @@ -1040,7 +1410,7 @@ public class BurningmenView extends ActivatableView implements column.setComparator(Comparator.comparing(CompensationListItem::getDecayedAmount)); column.setSortType(TableColumn.SortType.DESCENDING); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.issuanceAmount")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.issuanceAmount")); column.setMinWidth(140); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); @@ -1068,8 +1438,9 @@ public class BurningmenView extends ActivatableView implements private void createReimbursementColumns() { TableColumn column; - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.date")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.shared.table.date")); column.setMinWidth(160); + column.setMaxWidth(column.getMinWidth()); column.getStyleClass().add("first-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); column.setCellFactory(new Callback<>() { @@ -1094,7 +1465,7 @@ public class BurningmenView extends ActivatableView implements column.setComparator(Comparator.comparing(ReimbursementListItem::getDate)); reimbursementsTableView.getSortOrder().add(column); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.height")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.shared.table.height")); column.setMinWidth(90); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); @@ -1118,7 +1489,7 @@ public class BurningmenView extends ActivatableView implements column.setComparator(Comparator.comparing(ReimbursementListItem::getHeight)); column.setSortType(TableColumn.SortType.DESCENDING); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.shared.table.cycle")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.shared.table.cycle")); column.setMinWidth(60); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); @@ -1142,7 +1513,7 @@ public class BurningmenView extends ActivatableView implements column.setComparator(Comparator.comparing(ReimbursementListItem::getCycleIndex)); column.setSortType(TableColumn.SortType.DESCENDING); - column = new AutoTooltipTableColumn<>(Res.get("dao.burningmen.table.reimbursedAmount")); + column = new AutoTooltipTableColumn<>(Res.get("dao.burningman.table.reimbursedAmount")); column.setMinWidth(140); column.getStyleClass().add("last-column"); column.setCellValueFactory((item) -> new ReadOnlyObjectWrapper<>(item.getValue())); diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/CompensationListItem.java similarity index 97% rename from desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java rename to desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/CompensationListItem.java index 2e12392bcc..90d943e249 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/CompensationListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/CompensationListItem.java @@ -15,7 +15,7 @@ * along with Bisq. If not, see . */ -package bisq.desktop.main.dao.burnbsq.burningmen; +package bisq.desktop.main.dao.burnbsq.burningman; import bisq.desktop.util.DisplayUtils; diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/ReimbursementListItem.java similarity index 96% rename from desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java rename to desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/ReimbursementListItem.java index 1a3f695ff8..d6d444ae1c 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningmen/ReimbursementListItem.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/ReimbursementListItem.java @@ -15,7 +15,7 @@ * along with Bisq. If not, see . */ -package bisq.desktop.main.dao.burnbsq.burningmen; +package bisq.desktop.main.dao.burnbsq.burningman; import bisq.desktop.util.DisplayUtils; From a03b0eadfca5945ac86bf1e8a8d2dd7e4f64d30c Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Thu, 24 Nov 2022 13:49:04 -0500 Subject: [PATCH 78/86] Make codacy happy Signed-off-by: HenrikJannsen --- .../desktop/main/dao/burnbsq/burningman/BurningManView.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/BurningManView.java b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/BurningManView.java index 6b8b2fba80..b1894e7584 100644 --- a/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/BurningManView.java +++ b/desktop/src/main/java/bisq/desktop/main/dao/burnbsq/burningman/BurningManView.java @@ -381,7 +381,7 @@ public class BurningManView extends ActivatableView implements balanceEntryTableView.setVisible(false); balanceEntryTableView.setManaged(false); - exportBalanceEntriesButton = FormBuilder.addButton(gridPane, ++gridRow, Res.get("shared.exportCSV")); + exportBalanceEntriesButton = addButton(gridPane, ++gridRow, Res.get("shared.exportCSV")); GridPane.setColumnIndex(exportBalanceEntriesButton, 1); GridPane.setHalignment(exportBalanceEntriesButton, HPos.RIGHT); exportBalanceEntriesButton.setVisible(false); From 1bb4b55220ed17cc60f636877b3aeabeaa8073b2 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Fri, 25 Nov 2022 15:05:26 -0500 Subject: [PATCH 79/86] Add BurningManAccountingStore resource file. Use resourceDataStoreService and extend StoreService Signed-off-by: HenrikJannsen --- .../BurningManAccountingStoreService.java | 61 +++++++++++------- .../core/setup/CorePersistedDataHost.java | 2 - .../BurningManAccountingStore_BTC_MAINNET | Bin 0 -> 4749552 bytes 3 files changed, 37 insertions(+), 26 deletions(-) create mode 100644 p2p/src/main/resources/BurningManAccountingStore_BTC_MAINNET diff --git a/core/src/main/java/bisq/core/dao/burningman/accounting/storage/BurningManAccountingStoreService.java b/core/src/main/java/bisq/core/dao/burningman/accounting/storage/BurningManAccountingStoreService.java index ec650d9774..79a58fb07c 100644 --- a/core/src/main/java/bisq/core/dao/burningman/accounting/storage/BurningManAccountingStoreService.java +++ b/core/src/main/java/bisq/core/dao/burningman/accounting/storage/BurningManAccountingStoreService.java @@ -19,12 +19,18 @@ package bisq.core.dao.burningman.accounting.storage; import bisq.core.dao.burningman.accounting.blockchain.AccountingBlock; +import bisq.network.p2p.storage.persistence.ResourceDataStoreService; +import bisq.network.p2p.storage.persistence.StoreService; + +import bisq.common.config.Config; import bisq.common.persistence.PersistenceManager; -import bisq.common.proto.persistable.PersistedDataHost; import javax.inject.Inject; +import javax.inject.Named; import javax.inject.Singleton; +import java.io.File; + import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -33,29 +39,16 @@ import lombok.extern.slf4j.Slf4j; @Slf4j @Singleton -public class BurningManAccountingStoreService implements PersistedDataHost { - private final PersistenceManager persistenceManager; - private final BurningManAccountingStore burningManAccountingStore = new BurningManAccountingStore(new ArrayList<>()); +public class BurningManAccountingStoreService extends StoreService { + private static final String FILE_NAME = "BurningManAccountingStore"; @Inject - public BurningManAccountingStoreService(PersistenceManager persistenceManager) { - this.persistenceManager = persistenceManager; + public BurningManAccountingStoreService(ResourceDataStoreService resourceDataStoreService, + @Named(Config.STORAGE_DIR) File storageDir, + PersistenceManager persistenceManager) { + super(storageDir, persistenceManager); - this.persistenceManager.initialize(burningManAccountingStore, PersistenceManager.Source.PRIVATE_LOW_PRIO); - } - - - /////////////////////////////////////////////////////////////////////////////////////////// - // PersistedDataHost implementation - /////////////////////////////////////////////////////////////////////////////////////////// - - @Override - public void readPersisted(Runnable completeHandler) { - persistenceManager.readPersisted(persisted -> { - burningManAccountingStore.getBlocks().addAll(persisted.getBlocks()); - completeHandler.run(); - }, - completeHandler); + resourceDataStoreService.addService(this); } @@ -68,16 +61,16 @@ public class BurningManAccountingStoreService implements PersistedDataHost { } public List getBlocks() { - return Collections.unmodifiableList(burningManAccountingStore.getBlocks()); + return Collections.unmodifiableList(store.getBlocks()); } public void addBlock(AccountingBlock block) { - burningManAccountingStore.getBlocks().add(block); + store.getBlocks().add(block); requestPersistence(); } public void purgeLastTenBlocks() { - List blocks = burningManAccountingStore.getBlocks(); + List blocks = store.getBlocks(); if (blocks.size() <= 10) { blocks.clear(); requestPersistence(); @@ -89,4 +82,24 @@ public class BurningManAccountingStoreService implements PersistedDataHost { blocks.addAll(purged); requestPersistence(); } + + + /////////////////////////////////////////////////////////////////////////////////////////// + // Protected + /////////////////////////////////////////////////////////////////////////////////////////// + + @Override + protected BurningManAccountingStore createStore() { + return new BurningManAccountingStore(new ArrayList<>()); + } + + @Override + protected void initializePersistenceManager() { + persistenceManager.initialize(store, PersistenceManager.Source.NETWORK); + } + + @Override + public String getFileName() { + return FILE_NAME; + } } diff --git a/core/src/main/java/bisq/core/setup/CorePersistedDataHost.java b/core/src/main/java/bisq/core/setup/CorePersistedDataHost.java index ee145e3edb..98e171b426 100644 --- a/core/src/main/java/bisq/core/setup/CorePersistedDataHost.java +++ b/core/src/main/java/bisq/core/setup/CorePersistedDataHost.java @@ -18,7 +18,6 @@ package bisq.core.setup; import bisq.core.btc.model.AddressEntryList; -import bisq.core.dao.burningman.accounting.storage.BurningManAccountingStoreService; import bisq.core.dao.governance.ballot.BallotListService; import bisq.core.dao.governance.blindvote.MyBlindVoteListService; import bisq.core.dao.governance.bond.reputation.MyReputationListService; @@ -81,7 +80,6 @@ public class CorePersistedDataHost { persistedDataHosts.add(injector.getInstance(MyReputationListService.class)); persistedDataHosts.add(injector.getInstance(MyProofOfBurnListService.class)); persistedDataHosts.add(injector.getInstance(UnconfirmedBsqChangeOutputListService.class)); - persistedDataHosts.add(injector.getInstance(BurningManAccountingStoreService.class)); return persistedDataHosts; } } diff --git a/p2p/src/main/resources/BurningManAccountingStore_BTC_MAINNET b/p2p/src/main/resources/BurningManAccountingStore_BTC_MAINNET new file mode 100644 index 0000000000000000000000000000000000000000..ab31521895e7d8d871bde7cf46f4759b9c43bdc1 GIT binary patch literal 4749552 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 z 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∾=ryaGx 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

*M%>ewYD|e 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 z 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

=EvXMY0Djt8 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

O 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μ}IB3#483WXdAsdi}B#U&#e+L=y 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

ieyV4wxvw%7q9oJKmE+MvwcjE%_GkHVGi_<^#1@ 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

3M(L$;<&Eyuek9iErC<1WP5% zN+HAztJXVK_(19nX=w#X51t+~8lS0!1DEYv`iZ z_V8~K^D%J;4{(2QD}i6SaT8U>tl$CQ(K@78IAEcL&r!k(9tdu&OFVa!_fOa)0xS3j za4$XLzx->x3|~fr6+8%B)_{1n&+OOu>@Td~!QgI2#1A!`a=_c9u;TDTz^hD%FYoAq zi;h{j!W(5xiueBzwKV#P>tSG{Y zYc2x3&Yif^dP~fYF)O7M_kh?%tp9~8Mcw0U4R}YgsPD;p>!aal%2^Cf`p>RugE>@n zzd!q4b`-ozL&-b-QvK>96;q&icxe6h0+4w#gT1(#1Ie(~5i3k)7%r4Zs4_%)3sW4S`Ted{Ug z#}L1fdAjUr1E(^z(|JNjym?-XyYdH$6Nj{Fsg(A_jp>-aV9C+oeFXoUOT2OI)G^W$ z%t|4|BbuEvU4ct zQrU`PCcs;(h`cA)q@$T&F~Ad9F-wSVRF^!5#U)t5lfX+$iSLa4h<2P=!IQz&tB9v- zU9`h~L0G|4z}0GrKV4vpAw9E#r-GZ*5x?gbbrjPcu!5(78w)(wZB{CNZUrkYgmiGP z2GY-~sm0idS-GQhdH?5Og!lw$ZaYaAbsK?sO6GtE{|xX}-FDXST>HfvcOJ8H)ofs- zYf4CbEoZ<*b$2dN-EmFw8QMw?gOtqCKVVxk8!+ zX|O3t6=TBsU_U1uxZ=Dj%VkSzpCPq*Nz(pnZ2rMkXgDCm7j{JE#B=@BP4P-TtQ11r z1Q1x?uooe+A$5O6(%Dy5Tu1%E0YjUw;2&LxcmLxth5*dUl|pM?iEzV+uO6!HsHmcb zxa-H-G-i~Mr+6WEtGaTBO$H%}Umzv1nIVJG7fVIb)-6-{#$&OpHG|^@{rB!=OdtRItBC|q=;sdh2@GP252# z0BaY_3SI>M{wwj>mF!O`%!-`F;QocgclUgWj+t30XO;L7#&1ooY?Q_k8?tuA&bf%Q!|y5@Odmh8=zRSqm~% zA!4cuMO3;Qh=zs5#l2MxUZO_)?`2`AJ!a)H?atad4UsFvlu;OqVz$-&Y|I6p!*RfYdbSt=&dxkCC z1Zg9rhM^=)3rtyv5f2^Pi@X{z5yKq7o53@piT@cOq`7I9<1OU;9mvay=EVV2h585S0({-f0?8o-2BZ1Z5FIl6!9;AEd{-sxC0N( zD9%7sS$Mz7Chz`pcVg(qVj!v#|)8>dO4{z-v z@-C7wf;Wo+t^n>U@O-N_bk@v@Y)`>IRg*riXKVu=9bpwhcYc=KrFZo-t^ny?>QnJ_ zs0i=pE#w`4IN&|*WyGMnsLSa4fkNIcVqMm@at~Ir*}P{gdn@^$4{%q<*bPy@mB1a^ zh;LEsA&*BvSizOS8#;&|OCOC96SIP=fTzgFXrPT4r}P(|=$I83iz>LjCh_u$O$#u| z4l8#k89^$?5JC-7H!YHe8BN)bSvxp@tAj@f{3nl3c+z85G=&=A&4#3p8NIRxK06L8 z9j2{Y=YH8{g`=zi(S+8(l(ds(Zo4fl!8}m;THqzGh;O{+e;juptX%Pe^7>kFXwwZx zHt^Mkx1ue1N9#?{!#E2uIO*zT8(5pG18KbjNdsC8Fy3Jf;LpMJ-H6xP%@4riDy-nT z;2NI9BkgA8U}6qda6NDxFXCgyt3l7K;QHX&KExaU+JHG8W-8TY&Yxc{ zEIWyvpFQEM(Xnkfm_s3K*Jfu{+OPaypltaP0ACSge5HoWp=D$Hpw-6GaFn*OD zD{Q3bvK-n?>DWAym397DXJg^yJStI_M-1fCr~NRcq)%smx6~`$=1y8ew{098<2Ht1Eonvy048 z0$;HmG)PLa3!D7w`%uatx=Q=)4@dRBLSa-|s4zQ6D|z8j6-5HK0RJX%Gvy7rc#MD* z+!8#pgY@H{tiz4Utl+P~E1t@-w&Anf;^p}40IaAOEAZFPh_9LGxmcR4+`*bU9biv1 z){s^yk#tjpI;I|(1Go+NOLgLI$pa9AS;1|=OErl5Tp5dcWL6AK?7%g3h%XorSc(e+ zR!S-MU9XJOCQv1HnO}QV`<-9Ey=7DskBIh&D5pmekEaYnSH|LU5nYcI%%O-~UcONI z@9s`cw!vk{UiNB~146zxqmZGFJ8iIs1A)1E3D9T}Zey|Bf#)A><|0lGtPr+TimGde zkACM=Qx(3dbKwUJ@5}z#@dhRFdr2jEfBu9fCc;o2&fBHmi=~h{LK^ytq_vLov1-a3 zIBBkil?zUe6QrsZB<*eX8BGFnz!Qiwc=c=IcRk0{VpA!sRBv6z(*a7}!c3Uh(%i}( z%qDYO;2v#7?!DR$=V2&~AmFaxsW!y*O;RxoW>&OoZ^1t}65p;q*99{!uu_R_|NGId z{kuL_m#Z58VSDGGoq7jvfz<3HN%vKD?8Aya97vkG`$ui-B##sJ;B@()cED9d zw%5QH?xhLjUh=S_3G1;40`3QHl09h2q{FPoIN((iI7}ZR*&XetjPiXd^qNr;Z%56DL*PKD zozqF3U!0B=E#|`oF0X%N%r=*QfcASeY1b)N;5napa9TP2|M!*mzjO@L=&CVK82O{h z-1{6B#@^yM^yu>n{`q;JpX&}TerCzo6pSB(P?Ve+D$1dZ2F$mx0#TAKD+#K5EGF`o z_S}4fw^9*3B!dy)LmLGc961(G11t>X65E_5ffs}liD;V9|32d_qBLC}{@JZSexop) z7gY~bFD>B0A8FST<~l{yf`}IeoT}H)$Apy^Q8nB4h_L;sOH1ERi5urxrD^BOm1&r zf6xp?UN2S38|*d?BQBPmq~gr;tD*MyF#!_>X^J*UFE0+nP>?y0R6OW0X_7*_FD8<4 zb4cNGZ{2F1BW2QEG8_>DjVWSSv&TDp`vh@0ZFF;WEtlkHld1eES+wN;eG#@YKRTR? z^)$C=1Ba%jrAQDGZ=nQiSHu~KK;eSTsc?saW}Ly32a3p*B<006VPqiI!1{UJuW+iU zO0zI7t>e81^>iw`G0DXz%ue%@tpAiZZRb?q=bhNip&DJAat?(yWp3q=mtILBF0?2d zm8KUR)s9{4Q^M@nNGjIdgc9@T=$oSKP$|OkZ z1!?fWL09pqYB+!=gBuo5h;{D2h2Um~6`@nWiwlVd6||wfU{)@)Ly9q5xJZSxvV^4N zK?BEOiwYbNA`RTWiul!q>`RZ#%7thO>F9to9a81*Bt5Is1HCYFAgOrK436(6jclJF zO{*vA@oF=icIJQ(8Q>-@#8uDtz<`EXxol6p2fsszOh}Vua(MXBprv8d$-NM`y7?1=%_G!Ea@R`!D@l=YZAIVw&)FOJmLWAD!l(;iYTIReXG3{%?s; zKC$PSd3)+eF2TUT4UQZ#h@a<=>iUM_H4DWXwdgvYyI3K?3&8bksMzCXM?A(@5>}k) zLhw%x#H$v5#C652T<9Y|D?3421ZjmMNiUx^=qWA1960GGm7Q!qV=<&5P9&XnHf$nJ z8XVAgm4GLB5cjV>_bcAPg_T+=#b=$1F(n=UnQ>ulrre$d_foird6D~w+KZU!VnN8g z%R{MRZka5(i(TP_xwF{DuQIr|2=0}8=Bz@~i6G$R;AP$vc2Du*yV4TOiUzO(yfujU z&bobQB$$;e*^2$~e1G!w=09@wGcoJd`;C0~dJ`QGh0vsF=JBU!3#9C*~0Y1!x9OswDoepY~hqBZieLK*9#+PwdAgEzo{xByI88 zE0?kL79Ly)jx5%hMo1h_@9$fDiHj)NDrrFHvCCa=?H9w3p8YzCBuLifrRbs7I|iaQ zT2YoJ1qIe}Z=JJR0c|Eq#Fb@N^oC!##GaNm?2{pF@b*(CZ^LnSuoS>zaMIVa`>4?<8B(k1-JOoI z%gcOyO?B?#tjQ!|1fxe0OV;<&$9tNHi=&qX4>lsccdlVI9)n@!G7b04d`(EqRK98X zew0%V-b$|IZ8mJ>cPy_V1}D8@lKj7qZL1Faai?Wp>Z!-cGVL_XP)YKLDC0&EM?9K< z>1!63lgceSS%^bYfK=9-q&}k??AWx|18aDS zkY9g!TsWhce^pd2RrIvr4Zu1o#Xm)G8c7} z&XmoZDsI&~R&^=}*pf&AoqRp<#K^*etAe|v5ci!KgSMVo!PUTZQ;92lTWyX;3RZA+ za65q?-&&2Pl3Bquz(1sszRoT3KMb5;1=j>G6}Xh{Yk$n;zzVJfZj?@XjjB1zu;&R@ zaBc9YPsC>(9)XEHW(C&)H_joRyG*MAZ?C`#{v146;JrfGFCv%~To>FWpY&x)FE?N& z4_2HTJ@BLg;%g^vo+mBAtW;&KkRDN@d(G7!hbmv;U=^VWHt{qTFo@M|3xNNtaHwz*p-id3kUgak&cI1q` zj)OKpfeoKgfoGTet%<#WC^onuc!nDB?9s!)nHAg!T=qHf;=_f{u%``HaAWX7L*f@T zTOXi-gcW_N33##@@qZsgVraswbP$2!ogU<<%{Hi*LfdXm+WY6y`k}#x2lxwc%U8r# zkIkJbEy1j4Sj@oXUK2mEZyBcHnU!L9nQ`e85;use+Jt>8Vz~->x8~p|WO|8+DK-?* zZvQTHPb@Aj0dsI0d*WFYlhW|XDpADU^e^su<^gUAUg1dm$dNHvR%2H1*WfiS#0{k{VwX6xqIg!|X70rA zT21jlrvWQ>gc}Xju3$#a8q#8KlB!Jaki#@K9H@Bqg`F2wwX^IW#2O)H1&m7 z@re^yaVQSp`hmnXHYj6c$E@6;xO}zZD-(QA~C0xS4i@S-f@b^>SoSWy%=aD@WmACFD;#*P_SsVHJgf9cL5bBxQ~Ax$bJ>9C2b&;~LGI<@ig zou{^W(SG6G0dWy>>g$qW$m9X{oJw*(erFMzc192`Q>y=@C=}KcQq6jj_N`ri0G;tWSi6%-)n)DN|2h}dBH^&jq^YZZ)lyGNV{jL0*0r|1KbBZx{df@JGm_w z?!$_s^97H4s>oW~r=OmWz{Xx!x#G=uv>~0+b(wKdHnV$eHS_f7yAcD>tB#`RN%%j*i{7wl8O&m z;w<#y>(B)O{3|@x%%o-}t{@ABxCkK&%%g)MId1?iF-cJC~ajV1^C{M``1Z z{5S@U-?jhWUwu-wpYsn%J$g=8;R^h9*I)?_Ej*sbegPSayvEg(H)fZqF6I-Eoupz# zof_G%P%5m4WE`}1iqBY+b@xvE1Wd}ogA2QH;F+U@#1)df=DGY>UNJmVSbh+b$R<_s zW5zN58N;}u3~o#0M??*mXUKD^HNB4w=g<{Jm(d)0c|}*7LoV(C{AytQ&p-Dkm3Yb) ztK|ugwIVVrTxZUyWE6JtD+fgfH3p&1KcXJ%RjD5T8rQEG;~3N?SCXMCXYE8284qcq z0ZENkf^?{0xJrf0-kC~{A$?bPuMUID_6RN zf@wVoiOsx~lh!m8IF*&cioDG)%B;YYHe!(U&G8?1!L6tp=cUd_ra`LjO45JSXJML% zIs9)8I?#I$sj&wA-AP^8qby!&OO%ERw~V++ep27UCv@LyJny{k4<9`E07Xh?2lS5e zgbcG@jjg=MMnw|c-6YPkuJ041WnLuJ`Kx~}dPz8N2b#X1H+x>ofV9$^q?aa7m&7Uv z9KbWdHT{TZJfAQH+dN@KwPt~<2NUo4s8SCvHo{7w>pQnXPQ2^mOh~*euc?`_Ih@b% z)(Io;FLD3kBiq?^uWe3IFMAVK#Tg=BF_8i^iAhER2(|7 z2WHf>5zsJ;0=8^y$6%R-C8@X+7j4k(4?ZHx1#?ly&+kI9WOD z(1aYnc`2;LQXDcNcP@BsDdj$7H5;=T%*utxSmmwAp}LYa{QjLjwgxvim3!t8HUW`` z9Q8tu-X_a1d}Nux^T9LADEHfk%g$n_5Uk+ez#GenUtAO6i2(zw;053+6~rsfF2Q)5 zS-}gzLo0~~e2K*Pomp`@i@-lt6aTGrl^b?t!b(LH-_6;Rxp4p?@hdueJ#2<@XvU~9 z(+P>S?|RTn*sCX=qYcr??0zXm+PLqO*8SR}AXF)mgO`9eG!U1~--F^aEAE$4@aR_J z+Y2;4ViFlv$|i`%e$HNp()qn9W;Xy#MJG;Vr9`N7}`2Mwo1YY*!>PrRHTOc(^c_-}mn8LVS#$<7yl~($b^N`g4~K4>Upc}d z-{1)mcm%6Mz|2<^@b!BmOs280e3e)|@)NFH@iP77v%Lh@SUucp?Z~|;Jwi!Zf(4;W zVgnU;=Bx{s{J+^f**8`i;2rjcyek}sIpM8Z+W@CIk%62WWPjRz}*5U-Zw=cD*; z{NLY0oZ;OB?@zAeJ$u9vOj)oPTmg#vj}bPphym|?O52B%(F|{|x8%L6=~O)?&Jct1 zR$Wka704it-rkUK9G`!K11HtJ5*|*~8Ij$&3@4v_dnz)u!d=Uc-1qg{ycs_! zM-c8Pj|M-yf=q3YR(~Mr-04B+Rha`PRnM4P%4ZsVwz>fI+zxl85OUAiZifjt76iNl z+$og!qC9)lxA_k6~LPWzP4uNB&?&riV{2pfAyL4U)Ja+U@jL{E}OZOxp4Ewiw`?P`^}xo z)opf**>Gf1M8sAh;>xP^Y8V(GF8DL>DuJuHtDVLG5mt19O5mQ~s06>5xM7gXtXv7s zui5nvA@N>MSdu9;s^U}d)xm>=DIW29tvYjrEiEb|hioC`D0@0x4zKbc6LPD7>r@gy z{x0wlX1!tMav!p?mnCGe`bS+qu$)&xNN(W|q(50f7=MZ*6N?3>igBl@B8P7+ubHH} z4-OehOE8D&L$TSiucXZXk#+8IJ)Zv`A95aMW@AoU!x*y}+syfFGmJTIY|hNgHgNl2DTi_@=}0OmN!0Ioy+2>w9@p>R=j-);U)Ozo?)$p0>$W4t|0MwK2!CYaOTP+EWEBe)z8Sv9LHx_62MsniQz}Jn zfgj%_eCpm$=rffnMH+qP%mx$lIfb`kb$1nO&b|XY(N+Ok?E(g6AJ@>M)3tiarFPr3 z`ciX!8u%rJZzJQ0-I8&9mnN(?sk~Zv$${?bE1XWMo}Oa0_X2Alq+M*uIF11L4tT*4 z;bRVcu$X6msBjm!SFmuO_D{F469bhZcfw;rh3BkmyNAEbL6stnhV2zMZyG6fVU0c^ z)(@ut&7%huz%jeRt-^&{C!c4kr&O)hmZksio19OaZ>xtfyNNz`Qlgive7xD*Oyz*@ zfqO*?pWo*KBQ&ML-Qeq@gnv0E)|>?oRJc2QeXMZDwqx0erc}5GJSjo=@`tUj@aaob zxF@_QN%+P?Grr{k3u=RJ>v_S`GlWNX`s`meGob$e`C-AF1XI6weAtU0(fnz)r}k4< z)^Puqvb@Q8H&b%jH`(|%6Ff4*eH4Eve5^(08WzM*;d|i^o(PZKUCf|csqlU9?5DzO zzL93hcY9Fz5q;raRl;Y+L`dkX6;vVUOh@Xi1q9` zu|7H6f?>7_fFFWaY!LqW)%s(3w+a;=0N-veJapR;PBEpz55vzp2!H*xy4&dvQK?EG zJj_Y>iBtz}-b$6K7#C8E>y1ZPgRuHKi*;H5EeokN0a~qHPc&7}lr!CJgoR_R>SDgu5E?qnl8GocZW29-)R;^EJ1h4{WnRjS*w)q$B#Bx#rK_m$ig>b2_QF-x5f8&6M!!&7Eu6t3q0?g9~ui zJyOuhz+z@yN|hAGg%$bUXw#)(An$}7YK`zB(O&KnU31`6Yo4!?L#sfa@+Y5DP$JgH zUSe%M`|DD=cmlM7{xKV@cg^3;om4?VmxzwqC((;9pYY>dR&q%6xo=;bqK(=$PNnIR zux1<)>(Tpu{rOvF0-S!(5wp&IhZDVMnR6zxApPHD^unyqPx99!kBZC@c5H~ zT$(DaBs7+oN@snn-x?MTx~8wn_iggOe?KxhdM}&H;#$Esu27R{G^re|2~MTZ!W5O(>O!beWM5+ zqX!4D0)Q-af9d7tGZERQRj$D5uL%$6+TZkzla~&0ym!w+t?BAoKJXP}%y0{O_cFZ& z`%>pRqv54Yo(tZkGMjfuW!?`MoyIMeDrpD$iCW-O?=HWz3iqi0Yo=u@V-xt*GRtmS z!E4^1?4wmLz1VLMmvAQKUf(6jAO=5Y(k~-uqGZ6tHsUOTWq8ufZqEa z+#*DHYMogpnb@I9ij3|r`rj?Z$;tjL-_MDBBZf*rB`3U=6PkU^ee;h-Rq+z zr*XZGDrgd-+Y+yi4AqLRdZ$mGhL(I0o)C+Aen_-yszjfu%wa64a!B;%&tCj$QD(c;zKUY3*0;oJ8-BZjJs<>#)z~lT z{r5ffTI(Zay(`w|!xl4iRsmu)D$srL{-*pMC0KK_#Jc>oxKML56`;DwQiL-PMaUiT zjBZlN(o%s=)s5_X^3{!!*ZBRP=k>oM$T)FExw@E69OEljb$_*_#grjFQ*XWqldev_| zJ9<@f)t-DSm0CZga`}}~xs&Y|GkI54q(Lg+Ar|)PzHzvB`@6grf+{JD6_tMvw?4rV z^)sv+t;E_b{^l&+G9o~%#!vQFi({s(V@1Z-sMhVuQ2Pv@6TWwigdfW~%Q~D&0b# zw}sp65$^xS0S-c`+&Jyv>E6Qa-)jA;xtUU>cE;7v+7?1wUp}+Eal!VY|Nxjl`e(Qv}U6Qj~@QE*;{E-^})&yd_YiK z#u*d+O8sjb;5rf}ni7_ef42q;@1%vVhi931!tYn2cz}co-vD(Ut~}zN1~5hljt!&J!4?0a%j?oW-^Z!~H0$__8`VCDEm+g;i1nCt>#NLE3DB$q0<6?NmaSMFv&9;8 z^1*nnJp#mPoIZB(3)*SX?Jry%OF`R+t};c(p7r{ZgC~brjq_#0jA@PeS)8yIh@Or^v|8hS>mDDa{UYw%m0t)p#PJgG~QV%|M63ySpsebX|7iPbk zo2eYyv4!vb;h`Yohuxd$triP*5&g^*-KTsxD}5>lhwBP2vUE^cttQR+m6<-OmNjhZ zXX;y;yRq)E5^J+|kAlo4Kr5~0f^#dFH}1ijV=LB`O7p89EIy$NXYa*!66G)F~hvyM}i0I(!5^c8Ib{Xpxh#X^`;0{+6#zdDKVv6+)}%pg8OWi+Prx5J3a|U@G}8s8 z!o%RZHw#Y>{pmd8YgDQd4iDKTe8ASIDf}S`s#cX_);23iaT05h$=YtvqXf405CD&W zAKfJ>E(Hwc9->ruBs|eac%6qCZFr9Zl_F26BK?Ke^=e+m{xejq$Px34{vyR`tU-sw z`e)q_>E=`bJPKYODE!8xW#0T7E-E}4o*FFNYxGl6D;0hQe)YKU#cx|MuU9JkEd1sP z;Rn9->dOi!Dm(@r5+=O0D}N?zrc`(={Mt$3J^mfV%;ixo0JUk~}__s@5Kg>fKRA~aE2WYYV%MqkFkJa;{Sf9RqpA;$po&b+Z z6h8ZWD2Jp}QeS|Vr3eq))Qh{MQnl8daBo3N_CQ?38kr&1g!ft(vaUjaSdFgfBm3Q^ z-^M^GcgM~amvMF0d)~yf=xMlab>8>~)k&lb`z$GA$-T6G3COjqaECBypb z^U}AuB@zHnf_oN9ih$@fOU%ub3QvZYmk3{Y-G-$NrNS@6)1M1Jx}wFmY=l9DUxBZw z6h7Ot)RDUYDpkA+5475(E-|l)>zo8i)vCC`p?fj?-!-gH)`|6?SN9{FM+9irZccqh zY3Se5p|(^Yh3KM<5`8^ADwj7)$wAgsc=>MORvG?IjN?!xh0&aDX$xy>S)X}c&LQh{ zqMi0gbd8)|%wkjy_zn0458<7=yv5*OsqmX{Pfy|3#(l7fSI|)5x8V2o3eS#NLNBaT z_-%NUukeqz{C3RTOsViR_+5YD!`fucW>$p?Plv}J7CwH!(*x`)LWSRfJBJGI(>t$} zE*2G@0k;Vg{``;b{}t$~5Z}&UZTd@|B4aK;Inv%V#CvHfH2x4d!Bu>+OQrQ|Is zQgY7lLkz1_`S3jW;Z)&2C2wcBSE=xO@V&Q$ud}?fif5Ck9PE9#cbf2SlYe-NU7e`f z*;Vz+%h0IkV;IEJf*ga=qN^2F-!B=am=?g)Svz@HQdU-ehj zCEi*@g%`rBiiA%{Ie}lP6j=lhEEazJ>QlA{C{-(RTh|Hdh3AJ@w>=iCMZgHA{VD)n z3{NZgdC>vk+IzR7kg_*K50dSgNCM8)cu-Dm6OoVlyJt6@6~0JL|Xcir|<+%DQL|5 zKQi-Cs-!UblEr8K(0l9E31`9>iB%AN?SMr4?Mhz2M422~bdbx3wd5#wudUv)nU_Dh zIhA@wc#bLjqs5=x`BWiRjOgktb?j1nU?vC3+GAndeeZ*K+RVKsI$!C3jbXeA_+@!x6wh2A+6T1xyK(K zq)wJt_l1hJ)%bqVe1CudxD|YJgz)bdEaPsYRJb)f#l$y!wvA^;N~I}R!w*J_|2_MA zEb=JTbarG^pB?X3)=k!`5!W&-jV4$_c-ln?uk6sU9{=k}6783W-|;|yDBj<7t)IAz zMep^O#-z{$HYBu5m4rjXg6U3GTCMD=ynof3B(_*XZi@Ab-1`G~P)UGh-F-b?pX~Pj zB|D4;u_JoNEs4IBdFeQRLO~ArTKJkY;jg@LaR=X-K!vY^7o-cHf3XE4R;5zm_3-#S z;jN;RxgRN2tHtag7HTKR2CV51#5&D#KUcI05UX+0$L>3MlVh{TT2UlcduKmx_9{TE zy9T~k*qB&3OdtF2Uir>6>gqsrWU)lwe&h8@R_@3_1vbLZRR}MvqQOT{j+`}igU!9W%6zqe7`XpXNlk-Hp9~`H>;kl zS;|dr`AXHACiqt4R1Gx=?D-+lTU1tCiC(j>0c*f2hi1)p?lM5DzsEE8jYMxHI&`B% ze^kH!m%LR>4lVlJq%6JL8ge+|XQHlYufHT&N9b#?#(4D0K6`)z$PA)T@ z5=K8V&!)3lM%zKOg^NTd2Jhe^QaRu*s$#o@ceCnxm0Jg@`e4RRgy(xjnDtAY`rJ{G zr8r~j)z$6qI0-sX{jz>w%onHRoUqzl-B;}KonRU`8|Uc} zuCPgWGdEK?_n|gEufnyvs&^=Evs(h!C%F;2+QX z{x1!6U2*!cma$`xpPOkeznm_<(y%W*zGynX?L#fHZLJmR`|oa4<#vKp#bNjnu2oeb z%{s5yXDv8#cdVX?VomN|Q;mBFpgld{r&ENdxxPbtDpgV#v!{|EH`9#4IKZj-SBDYp zNp$vYiN0j^&&Mq1kwdG%ul4v8X4BW}*E7!6`+uBk%ss@5Xsf#tz2a_5=65QGSdH80 z{@thax%cyrHt48Za+7eX<4wXl_ax!ZSANN6pE+qIp;7bN&BJmu)ZkWp0nt802Np@R z&D!U^*rY-Z&HAvai~a=Pt6-7ZnYNecq^Ah+cJ?~FOY<{_ejF4qrc}- ztxBsUJUEHJpHZ7(UfL59cf%}Hvz?uPT|Yhde&emWxgZMJ>nVlgw;p?wt$-AzRvh6D zUczrqeRl{im7q#VFKr8&(KXM3@!?Ut>3hX{Yex7{KBPm0-b&_yoW) z;Sqik9{=$_T^UW0M6AZ;;NzbBJ+(cCb>ep{y0+j;g2)#FnC0TpMcw)7VdgwX&oMb zqf(17cy_e#-{1G+;g(XhBA<-0e^aYiy)9+`k~N&@y=Nub-Zo}2|3*d*_(}M-Sm9s9 zJ!C+pRGKXUelSjWz?_NPz?CYgw^n~9I;Gn&Pkx|CtnrCrUHj!*^xP^ytj2c>4*xm+ zZ~4t$`jarXy;15fs811oAWgz8o^QC!ZHy!m{1oCGQd{4D&DiKo}goz4C@R7#71 z$CQZwX~v{(tTv-+6)T$Qs}Bu|eS_3Ob1c#O%O%>z_3k$;d6EMj2M?+cK0fQoU)&l{ z8|Cmw6s{&P&?j;pp~Zm3`P@-el_*5<~r%w@41%C z(sQ5*8LPMlN2Yqo8RE6EdL)+;D&Oghr*^kZwYy~TMGnu+s3X7qdH4}Ksr9xlag1`6 zDkT~1Ki|f@7Dt|dHOXWRaC{|?_9p;-0sj1dDQ2fIPf;qVFT&&PC3VG#`SbCkYR8p4 z=}b?WJfmF)2G>f} zs(9yI+xM_u!+IrBtnD_AT**iA2oS4r2OKuD%lF)pQm~$g73;xIZCFQB0h)DM&ZK#Q zj32sB!D-Ws$@q~rt#~kwvQtS|6(j+??82*0pG6HmQn%k5c%2f(>z!1859_i-z;D9cl7yG~Bye+5D*P7wf{C{-@{Zth zTd3^$y$vr(5&zGFhn(V>2C7!QfvXx#lWM&5BI|*6{Z0S(^AfxI)0`lRN+V@%s-$c^ zaA`Y6dL*W4)8QA>g}=4<7=vV`YDKxtd~>aaYISOMRgm%GWBH<5t!dgjB&@nC30sZ* zp`*E(N-I|5(#^5kqh2!0!0M1G)(neZhchrB0Dc#KJWKdzLuzg1%s_=_!foyek8r)Q zk^P;h@GN-Jec`SR!WbSZm8xXJFFg?M_){<)sZzD7%)9;VQ&Qw$jo7kHbxSLw+SldA zO90K23*X@^+;&JOs;E@0Eq;psuZM=-PICHILn#jzx1pds65ci?Y#!;u(z;3uzXyNd zA_dLv*owQLQaOhEa9>@i@T12hMdP+38Kfzd)TJtQgmBBTmx@^jK-C(`uTRQ%q_^oO>7(g$>X4!m z>%lu>on!H44W57#0Iz~4KM+2nQ(uH_`{thM%)cR_!mZ(HmBKr=nD5R$0aU8K8t%T%NnKC7{4%*zm8w;}=ISD~ zS7i;>W9!BGY;BJ}`5q_%q_BazISTh1{v|VgrE2HO-rh?JNnwk%e4AJ+AD%zRA~ykW zJ9y%D;gK~$%~)VXrB7cAkJ&H$`44mH{*@}7=}T)6U#(d=j~wgp79J4q{)X{)dFDj~ zIo8A71B7q*LH*IGQYFVrFA~iBaYhz7HsIZB@?IY7UBTiY5#+FkUkH{QuY5G>I$OF> z^?Edo9+1U7!2$2BF!4tHV)rxCG9tvg+Om4lKVwx3)8%Ab+3yyvGJOp6yl3_8s^n~% z>M%BvGBQ$92F>*3_M;Lr%-#ggy&-(}n*)}!4-Qp|dg(tHokm!h9*7!uOz%shTX0m4 zgs;9M;d9^b*+zXUdBAcBKX9(P3Qt`+s`1EXyq+22ZMgLQ12#4h!H>TMZgo%i4^L)t z7g4JG_{QKMq+U-)tXr{qJP>Px-!DzzeLVui8Zzs}e7nQ?DD~`r8`kgwvD&OI<7TG< z;7;(6BH@Qdx8gy9Qc1lXzNbw1=a2gEm`SPHDfsue6@#!kV_oxHteeWpJ$Of!0L|)j z{%lR2@$bMIV6$Ca8+~>JvDm8uG;4JGclG7kv40+VMO;RM|M=S}{hJyo&zgPCoZE#m zDjlVa=B^DF^8}ZY^fT+DQJGC7qj9!m*8X9lRu!+S)~3Z|ql;c0^=4DXioVk&@tz;aU++avs++so+nl={EzY?}`L zBWDZS*+!ps=*wm@cig#t;*LDwzugJY{MY{ zz8CIwPWTwBYH7i-iNvG(;Ce1(}10dj7> zv>~!|aBI`Mheh39wDtQ7p6GMlKMr(yNa22Dv`UqX?f0p7iB(>$30&P>)t4LgV|7mx zYrK6g`aBf?KLEd%A$(70At{s!_lNJy5Tf4`o=kvNr}&^h)zuh@b%U!| zS4NL4<8TRppMpQ$Z7OZ$AqKrlg`bAUx(oj+`&EBZqr#)$@jk*M_jqwzRVr19h8G+X z{;$KLU+HsDwPU`~zD--KXRzK55bO3!TRt>5Qvuom7Ef!c#=B>+K0YSan`e7P@j5yI zq=b7pW}<(DLTbh&# zPlab#?NFWEpS#WOvt)?M4}M+cw-)~Tx)jFiO4W|W`ui1Oq_~0g`Wms?e!OZB-%B9? zeiQz1o$z+o$FumLRQN4;(gxuTD?WRjw|=cZ%SRudta#V zyYPx5!au0rA)WamDm)W@@ThQ)oV^Krtq7H>XTeW}3U4-W(qthrbdJ?KhDh~6wU8!2?*IzxX4kRDzhHGNI zUA~OAn@j-w0o*1y)L@AWDT7!Siy2 z|2W;3B|oLYAHt6p3IE-v|2h8C0hJqHG5o?K;TAQ9|I33LRH?erMS16hOcG?=3%9Iz z<6kC?kBCmHkm!3Sr!fpwIb>9K)2@2fx2w#|G`cr3-f#Pp+OAPT`148$x6GQ(GOJ1g zFNND!x~R)5qxWDIrj-hR49{9E+}`=|2Mpy=sYV(6*hb;GZ6i>0{ zZ5Qi%OWSVas}}^2q5^K|DtyL>)YaURQMDAQznfW*;u%(J53$~IoXYvB0!Z;3e%MR+ z@CMPOP^zRb+VijfoYb@VO04DHV*NZPU^-u=AwVnb*RNhp!diuOyN_6F4}YZxQ&$4S z>NNO8@BCSVe@dCUT3q8JQ=wvw>9g(~K7v7jR)Nf_Mfz&7Tf3*GA%byVah~GuuT|&n z{$Mq-wxo=*6H-RbSAQ{fQ6<5x;0dRNf8XApd681#)^O{y!lO?0dX3$FsPNVB*jVA) zGQ3%WQYw56d_$t}q9^meXRM0~w}C&tB)rkOOHMo^N2Pge;jSsd_pKj7m#9>!deYA? znrCSnbM>b!c37?Mh}Ao|d=9H&1Zd6U)25LnrL9%g46&XJzRR916#!ocU!5tuY=Jd5 zf2G3L!*68?U-3cBo9seBg>QhT6bUbxe7v0fAE4g>Qvt+X`=R<_i6*QdvaW1`k*-d~kr3GlLpb zxsC%;>b_|9Ps=RTsMZPZWs~>mpf_n76#?H4cXpHhB*FbE=a=E2#Fj%k^DeW7~YKe&-;fPaToy(Cjamt*IRFBk&E! zggfml{hAL2qH>L`Yg=3wB!WQZ?ES!I}^!RyyPA*QHk-b2Ak{tB1i4ToXQ} zSw5vHRZ9^HY>0hbQY&g;JDH1*W!Pitk<&bFO=e6ESRM%O3 zS28Lf03HFa%obkf-9ziB7%DsxZkZ?iVAO=)8A77MPr-BV2_L_B#y31aM}?nOc}#qE zgeCV@rNX1&&iBPXCI0U-oWH2_K+*8Kg~ESM`Z|QFqe|6{t!+`)SL-v-if%hhn~#hG z41YV%hJwzJFx!;S?cKJ_BUD;i_$)lNR0?X4IX;RPgHg3M>Sq?I_iJBl{6oEl5<~QX zXA(U$a@QJeM&y9U!XKIV%3sZWSe-(J$H6aEnM#XX%MeDX@N@93maeM5>zel^Bk~5Q z@OXH(weVl&{=t-4sqpjg{cD7G>|T_?|4N|36X2Wdgx_|`o5#~NRQLtB<$B>AA{%aD z=70*n2;XWiym4Lyiw{cW%t?ehItV{J@OK6SN|jczSn%Q=`|Q`j>ZR06Slu>?HM?@( z1=cSK5UX*DCOY(do6?f7`fU|!_g8OZvI~L$cryH!v+#(fwkKJGLxo?4JGlyP5qgdF zOQpiEz|ZXwKE=cB2R^2Y3cm`s@euySxXf9cG^p@v@DLN|gg=j!@V>qq+VE);l4z%(`$6|Ithcb*B#8AyrVV|#3ec<_ zKYo7%mA#GiQlePzSj^kSK@dQSG~v1TvB(FZ?dNEL-@QSAYJ9Clsi30h#b~4}}M< z>(+zUvr**$jPFTJZ1JA{=ww`Cqt0Z_B6@3yL{GYPYZK2z$wAg^_!H~h>XN>^V+Zk*uLzU8um5AWbHR`%9z?vH<){%#M zGxSpdq$q^@9~b^8!#{$l2CAemy0AZo%uyrqBCK9vV$JpU=xJ`I0^kqf7ovsluigJK z%LAzJV)%nI!rM;|a%CYHRlPa!2%+-42;p;E(1$5mYoy5+wk!~2{QbzqS*iP_d0$#P zX%|tuARYFzVlcXwNhDLD@RuzJm!c&ul z*KmpM#;3bc;g8{gSA_2m+reN?sWf95{LXdZf3 z$KwV9wAu}h=(mN^%CTO#E!NII70_R)0Iray@U>aOhn#R{#X+fBX*MOt=V_?Z%~Q9? zT0!(vQ}q7gS2;G7gNi+aAI_Job8a4B{GwDzVVnxz#&qkC^*L7O03jp3J|L? z65QjvYBi-*VvQ&itIxjjL2OMT0A2;Re<-|V(bwmBe1HnKNMXNGiSS-qd(wj`6>bSn zEEgXCb7Oi1rNXV?hpU7y`qF(f&nQvh*6@uMdsH9PVB+Ksyj+0_Uk!J%6dve5?K;B^ zRQMXWovrYjGsba^DHU!5KV>I;;__y+wNhyUTjgIXyl?8O3^0|dHF&ol%GHHnhc(AR ztY_WrSyfj7{ETbi&fA3#4;;t1OsQIf7ws5UL(BTKXvQhBt|NM%vqZc69$vt(l^pQ( z@C&lUo};bN^h`S)oIDGAW5XAA7qGQ(D^<)_3taCry|jVgc?+u-*v2`}pM z^FDT;qiQMEcUrca6i!&zTo!9*kFZ{>c@Y5L4i7c)WABb#$yJ96cZL_Hh`-~NLr3|( z7AimQ4tU&c;a^Ta$pBfYT9N*_&)RAzsY8|eq=*aAiD?o&H|aXF0F?v26JB~>c(V;R zKVx$cDts3_s=(yW`209;OQOPE;fEgyx9qmFJ$_UgWH-EUjhnhYdYw+XLf?X_Rb|1? zw(Ci;2kXIgV*U1Mf+Lq60dP0?>Gi_@&Hj88k9AQ=?GC@NQ+VPgCoVmuN@}AcIhsCy zI4L}^2JRB;-8Vk7=7mH8NZ|>;u}Ap(QT-U4D^;uAzOhSBVD-Z4?Jm~Kqis1KRe)G4 z2fXO*FAcX<>m}Y;?R~`BC*&AaL*3Kf0`elSb?54v_3&mtZwJOJ*TBmCn=AF(o^RQO@|!(8F3 z7gaG3R4P0WUR)~tV#$Ul{O3F>JP2-8A>8L;9TsSn$}sB)Jlw)v9c8zE=Qw($%02(3 z1UDxGO8?iFx+Le@Y`ws zSzC01t<63Kaf|h4nC&E>KB*5*~9x_*{?2*=+AXmDI)<_2{Z@F<2w8-VGP) z%|RdDr#~S;vu+6MzJ$^uu{uYH)zbcT9!IGF&gE0^i|2*^)#e75k5aW14;Hyk7G#{u z7A1q#V*P2N^DjvBmN`4?F@7QkJPN)wN%-`gVYIGNDJ>cve?$0*ufDIz!ZWIt+F@M7 zG_3+F>hyVo#h5chhZacm==PgOFqI^SSdHBb*VcY$y6%j|s>-@BOG`NH%m6p4d6tAp z4<+Hp*L%|AskHDIcv!LUe`dC#Lr^L_7Jj`%_?2IFGqG1HhZU#ttoBfs%J-cD63xw& zDn%NrMCNu;rVS1Ta=P#I4_VI%gB|v>9HDY>xbdnq2jMy6Lb)p_RXdQF#bj$OCj3zxhwSPSg zjao49o`#w=Y1e?(Nub#CN2J&l=9^~l#FN6cGCnw0FhWB&Y~FLEbuJKXb6lcb5`0)n zQaRuk;mIa`^c@@S6H4WpNQAqDi+`=t9B;nZgsN36uGL9bDs~C$u9IRNa{AFJhQkDC z)|kr5#u_sF?fc~vltgsY8Hx7lZC;0=J2^D#%36)zqprzVJy7-6S*#@hei?ow zR`~lVo4KJ{N_1{nnF6Zcs^ znLD3S;kV#%x#Hg&(VSjKsqowIVu9JPU>f{cneYb16W-)|VyIF(<9?mn zBKap$q+|7eBGxe>3;dap5I~AMaO(=;<7)O8%kEKBNnu=gh3;c2Xp0Q2u4_D1XRy9s zJ085K0Ie+wCk}g6Lwom3>qzunqC+-H^spY&sjJE%*1+n21ZddX#&m@n7i5m*_F3H3 zGKt>pEzuvZAIKT4a!9msTbjH7;A?VMbK6zD-=MKo>t-B%7U4%t;hQf`w4vW42|OEq z!AH`L`TOgZJR3!Y=fL;*3GbAd{Ufb{3eSaC?H7Jy<#5*0l*%)bJa~k^@K1g>`-)HP zp-Np|dQHA%(ywYY;2z#AllPaHKl_-QsR(|F`*6EJ$>AOTQw~ecs9IYlWc4w}nvXRj zSge~zuDQb_YyvcEVdTEfl=cAYp<`mrJpL9vz6yXBz>kItUwyJ2EuvIX7s9Vb3BMY1 zDx1L+s-!l~hwe@vJ*3wyQYm7^YWDH-0i4|gh}Ea-i;MH{4J$8G^mi|i#Z3FNT3xLQ z6Lj=$nb{r9b;>&8E;WBhvB&u&E2rVV0l!Y+vzrtSFNW{FBz#lT54ePt$`L(+hb0ML zd+0I46s1b)XRBV+Y38^qJxEc4)#tKU2R9xVO}|M1ycC{b;w|56_y>=@H<{+6nwp{d1NuFpTvM?=!5Ww$)>7xiW<0PUK(iLM@0m?$ z8wpkP6DXtQ0OsQCx{y64Wb2AkH zuY%`Wd8yy4>RyA@>~BDYTcoPz8p2!IwdYJzD%=tt<0$;c9*(nlHxZSpSi!Tl3V(1V zmbDY5N>z;2yH^75w!&(Sb^8vnKK{LV95V<4#AeTp3F~UCB|F91A!Oexyp~IV z*8Y3KUHee6HCSC-#Tqmvdm7Jj2%u-PftUIS5A)6bg#~IFj#nHPMtQ~bWq{z;RlWh_jopkL6uVB8{pZegl}zsjAl?O+#a59 z;)gE3n!!CEl`1;GE6<4E_dpAFP%BldV%Trd!%49b>)sf#?wtJ%qi7XCicRpcSm9^d zKitC7G^&=OhJ}MWDIBq$jTh_VIy<<8RRDZ5+~tz+#vSH5@H?ZDdJBB#HR0u<-#+C* z9IBQ&@A8+wkzy-W&lIuNpOQnDsRH-~x4|Rs2{*Ty#~PVZwG`p;-*#_j6!jw_B5 z?L_pRXA=FkFCOC{;_5a=x#6y1EA>qr1sD59ma36S?i9d+C%bB25 znqV*7IY9hxtg~E1e}t+v!DnYZ;z+R%Yet}0yVUy5&D=}{zXh&^-^^viqg41o z`1wTP>917SaXq2J55cdR_;(ZRGWmD~Dm(!0n#MsYJj z)tVsGp`}_(48-b}Db_0M5L!zGz=Pn?_k_QCy*Wb}rIPvxJgGqVe-i^Zca^H8o_}%Y zd}f|UvF<1q>!x=fuH{o41ZdU{9-Z`=XZO-Se$!kThY%|U7o-)d zarIuAk>8f;AH#awWDV}6KK`o$;34p%Ws+j+w98yKO6B2jDBQuyM_t0{f6whke~K!% z>EhMKZF*skMN*vc1+`W`d3Mw)o8&RBu7>LSkLpU{$0;P!S_)}3*q8276$L*5FSHf@ z*V2ugK1yZnEDWCIApCBRbHB4Lf-04Iw!ZpZ*fAq!*Aw>A)A`HeR++|gMh6&M`e{3@ zR;BkIFJy!gPAO@dq?CE%mh+3Mvhhi z;OF-VA3yX67nxF}{`rrpKWpgP>~1k<&}qEe1H|idZwon8gjQMWk+s!5EDCF8kXY?Q zS1%uzyu~_Srj=jb_fdH+-emy@^PZ=*`J@iPdO;b8yRRQoT@c1Xff7|xy z7IQPD!mq-Qlna0Vrv(vw;u@6;QJ>5 zUmtJQK|{@_Usv#IMVrJ7W}E9h|#mvPM&lUW*m`(o3kp%@MwgzT3rif>{Yul?_j-n zT&(ZT{;e*nE(B1g40!x0;S2k|cY{$Gs#e<475}`YW$jaXWT%F*7x$>5PIpOI5G@J) z+NtrsN-I`lQhcE9y0`{cYShcbd-$e!?|R;2u}ej0X&c^o)my*OR{plybe}dFX?%_0 zrc=>CfyFd}q?f{ZiWb62Ayf{a`%y;~({fv4XdTcV*QTbCbEJAJY^ zF1tH&T&nWdU*&HHv3d>=$tx@n~svTI{w)DEg!9A3yL4BC1xQp#9rt zY3Q|vy{#I|t(Q;qjg6Aka`HA-kyVcWjSkY!PJJ;tIP&>-gS70OFTh%`MXdIh)0jr70BNQoGy)0-&v2BLX0-=82gv{41OVnggQwfX^n?eF+QXytv=%(mOR%`k3rM+ ztA92vB0R!P!gK96b8lBkq>hnCt4Fg{^ESEZXTkQBWffYDvLZZ9otx2Ue;iFTjqRTt ze)Yu({qEBG!?oIkH;zyXk`JlO_5)Ixi5~k{1yohitSkN~QUB;&jP=1mvECY1$~vbC z5bK5NRanb938S?te&jc(SWB4RX3G1rr;v<^L6Y&xjK(*)ipeWSz15|x+(YOXlCC!5@=wOQIAMdgD41ca>I) zPJMXe2g)wPx+YnyN7vM$PAWjNcI&fpy&&T&-Jg~>n=Hs^osqqVs!`|@5~i6FF1zKq zi`f}z;pK4WD^gHpK$A(ll7h;->nZ%;RpGCf*883%OH}=={G-=9>W#q)yiwQ1yY*^F zcV7J_LaS`ECBf>A&SzM|(!|$o74;lzaGqG7%{Ylw1xO9f z@2~!=u3-PI-wAtZkLl+#UNPNdjYb&Nvduvrvs9AOqfkb`jqE{bWYLO66zS z3_s>B{HE)u*ZHaysx*ypoqc?!l|HgKwCclRvTjke@RI1k!)hO4BM>>@Tj7WH3x9oK zFq1;1a#e4GTOAbs^S%Dt=m1c)(nftgZXhX~u%?@=12)cM)3OSHZ-*ZYk`zlL^BVEK z3M#3c;fGHMAJt|U4X#w}H=e!sU^yqv4y=2l#d_t~$U!V35TIEA@6$k`)g=) z^C0yM#f5~nF_LilS3g^DV<0VjC;UpR@WivWpR+>=6}}5zazVK7GdH+WIR;mFaffuIrfcH5)?7p;>3P4%Zhj0^20SQhj%#*ID_gi*ba-U)&;84lVlQp?&6I z^}u>zjaVJV=WOQdodjssE|*Kx9!^iJacjj|{zu)D+zbhTd%@Ekg&*28_Ft|@RDNA= zc($|fI#b^n#H-*!x!*AI{})ta`aYxCNn>|jk-qn5q)HzM8Dpt&0(I4kpu1vxA7C+ zdeCULq9_&a2lwAEJo(!9*O~dC!uP{Z9uWTMSds%BJ1YDDy!eptrNd5@@ty}N2j~y? zIU(GCM*#~)N|jn0-_Mz|ps{*W^dQ!RNU@%Ft-XWpivaBaUk%@UnzlHEHTkSq>)&~M zC;x3qfM#u8&!t>Ly;8%}L)HMI*Itllzx&VvsZ=Zo9&%N9Y)H4Rd^HPIQWsaROipSwJy|QQo8A6svK}FN!!?P{ zTWy)f^DlD1kHUR!3g5D3J>w>&!h=;U(u7~=r#_piR1WYM-1e^U$~^TMU!`hAp0wq~ zMV?kDYo=IpT+Dkj#3BG53cr{o{P(XLvbdmB_;I*%uJC~y&Wz;KCaCZe@EiAp7bW&( zCzw*HN*LVcf$-QyeQR*fK$WUQPJS^vXm)vsT9*ySdZj?DU)3J@K1WXg{3QI=BjJax zOg+vQc2MCFaIYuACqKLPDi+D z>tlJGq*VA>_;w%RG3|@E>XZtPfuGnX{H?E=_27#gsPI_0gRgM6r)ukmQsHs%2osO_ zv*tnenxn$c!H*mff3rs}KIB2A3F6^J!NNBLf4`5%zo=RhEPGqtbUlyt(J`^U?*0X% z9~HoYV*>nknDDOVPoB_Wph^nkCG91fPAnH>^okdqYuRXM&j;>7TG?+t->y~*E>OnZ za4F-h@kc)4EnZ6E>beL&5-+@N-!~~+salHf-Q0U?$n5%zjdb3LM7v#-XuIUncHBb9 zp;?;@Icr+aGDeA`AB?E0x&GGja7v-mCEmb6@D*Ac+($zE6vT6svX=Nm+|dLaSf~WJ+V${UbvpMcLLxk z@LTtV=PmiznsT8Lg6dAG?`5wg-Vgv;hRf^2RnDRXIm_)R;2B-fT37#U|nr- zKwVw0S_Spu$teMvwYYStdIEnFYxFv?y4ZF0f6n{+(^x3cBUkq2F|05 z^B1LzI>mec<{1GcX*Kt#`^#$@${t)AuO+LYEc zAGp`_OdYSKByNx}n5s#mO*4Gq%IJG(ctu26bD87*=p zqq*nYj(l2-yb>O;`n?yotDt(C?r6vnbm(h^RV{&YO75l)<+d$?eoXJ1I#%IfEU5fJ`>)nf1^CM_@I*dA>7s0 zU-b!BraxWAtN~SP+Lk|cRbRs`#(I6NSO-3@%V;F8d->t3| zZJ0&EQWA#ll!U&szF}EJrPUI4e$C^cb~MdD{_K*5zCQe5Emz!Q5<2aYgnd^y^=Gz6 zS}ozRx_;xe=vp;9J*Uyjh|V`fFR<-6ig!=RA=dorzxNq1z;6nT{zTP$j}+8+#Tpu2 z1&Gxc-;eJTF;y#j;^Ygaf2n%uzoR}6t)Yf>^!u^X>I(H|ixm`d+*C;Y-kA(zRZ$Xc zbW0W8hMvXx4D0%XQlEQ=cg|rJL4anxvM5nqAJ4HS9TKZg%(ol(Bp(5qb>TM8dHisd zSi{1_x@ddf;p_<^K(nr1KCntdm3I5p+DH}AMa!yioPXC-I8!AAn#g^Zl&#}4R8f$2> zSaUD^z-6NXOufv#>R+nKuj@<;1;%+|=TT!W{rYOcovumv$r4EtbQ^4X?xkU3}_sUOV8hHaKWvij7n1(cl$ZFXO2KgS{W|O1N8e@UdPw;iQ=~o zaql-6P|t>hFt*A4r0u zV_HTsej<$|FjkOTY_>8rgs}j5;GHNht=_%eHk$57#woknH({%|47A~Jt*;vVUC)kU zuRoGv{oe1xnV|~T5;pGJKS4vjz3e*)S~us#ZR4{AOCHLP9Co+*Mi#Xru$ESC(=m=C z={MF=?%7f)H+oS9w+vOfX5H5O`#X{`{Yvn3+`wf`gQ+~ayY z|35y~Xc(K#VGcvaFbtcW8N+OIoYS0VHrt$LW9Dp;B&R}2awrs~lOi2Z3Pn*49h68p zB%LIckl*uq-(PNz>-X>T{d&Ky>%KqtecjjTzCXqT#H>@my(h+F)%+O?CQQB0!8>5+ zs!ZxPpUlQlTg^8d4FXrB0jEV;*67r-*(* z;>%z2dK6Kuv;k{>>V(Bkqm-Y4_I4A6 z?|}#36aFM@C$B@OC>8dECzT0b|Aqf6{2L8XDbn0y_4fFV>f?G|NYfvRG_RT~vn(n> zq~@*pTH1pr++2H+CRhikhTwk0bZ!8ZAUD^+$mfr~_1nKxYiIk=9$hBd+S@W2)Ts=( zH~i^x;i1C|7;C90+z0;HMtHSV8Exn!66JjEhZn3DJ}SK$>-j3GRWCHd%NQ4$H7>6_ z^d{N9WIx&<*={2|zTmSO z(gZ`=Zomf#?7AQUiy-*!ePU7j$N9Z@y^pANY6Sd@JHhFT&#jP^#jX!|wHtfX!x;}!aJ5VVZBjBwOX(IW4|$PVbKRdK|2~SX>@Kf+O2hn@J`#$Zfio#>z>m7yHu%39D zS44@zbYfeSEb(7)8&k6TF`VtL` zipuTv!el|$+5f4gFa>Qvl4w`9Dr7oJWzg44g&#-}UVlR2BepycmBTkX_HWwmF}l+x zy0vwZK05C-;8u36?bR&PaNLnCj$dx*`7KlM_=@9|QO|DCD~~4{8{Eu~D=fABt*zAk zod5HtVZzF}#^Bhzpy#{JG%DH9I!D%@fD0o7{#vF6Bl zzJ^RxY?F$g|2hrkf9s%Cv_|q5VOmK(Kh-$Lu=yH}E-S?`uhHu~!IZBi^}ju;gCKLQ z#xnlZpEOnIUxSxwsN&y<&D1)JGWM*MGNyK0bdv53CFv*QdzW!~m;0ljn-?|5Pcq8X zy5V&kFRv5Fwtbs(XDeTLHau*-@R_Gw8KS8uJV$Xy;b&%i8pI3-QTPqG^9JFA0%HR? z&qU!j;inD0?BIXxX*r0(Z^3OhioW&G7#b@Th2Mr>HTZwqYwYD!K%($m_+=N-r~cIC zJ1YwnrE$9hFLe`sJL5?c_UI6mLp49V{Ylc=2T1df9`qDx*NHReMydqutn?pl+m%c9 zF4DdJBE7NhVh=X9lAuYK`c?W0TL1jh8Qt4>t1tcKlbszQ*{%N`{~N20cxc%+Ai0QNX>h->UPcy zExYbRTNh3BeSX_=uCF2t-BZQz<2Gtwu57jJJ@L*)7sagk&?v74aupWudfuUm9JO&M zM^lVrgyHySaTOCi%2#u2)qCwpPTM`Cw%4TafTD&h=cxp(o?UzK9~f`cf7Q}Fz~L=| z)hE_U$lh{GvXfh<^QcfB@cVGT+rnR(m1)PUG*K#63g22L{Ls#?neS0i&3fK1v7d8i zKR|l$u}CitJI@@eO3`L8Lxd8rp$xvG3uKL4MD@&1JYTKcqEOBV1uKO}wCI!X8Y=Aa`> zw3xsv;Wq1qXTP+Gn^8r%+8)7!orIsh_0302!w?l~^U@0b*H>@BD|^JN`OC*-?{$;x zO8^l-hMIMci(~Gv$7SbISl+N?t;-? znO}z5UghpVb*jkr2$gJy`1k2oDG#lnZ7m&)>&g5ve8QjnC@Qmtd1Jbz&=5SuaNSWc zyuB`^K3gTRl^^4UZ(4j^^5APN{jV>p+iT_4UN}H~4$}GxBT~b${n4sWT3>uMX@{Vc z9{gm>kS>ps!d<3hF@8}A@a6E020xcslUrOx;WqG{(W1XK?nj=AD#|%s0lyL}e9PL& z{PZd+MZR!LeVhBeR*Tx_2i)VXw8GgqDx^7AMEZ1l`2$`yBtdia+>l+Vq1(+j=!>QaKVN)VQ*F!m)`4?wPZ_(iq>L*w zFAn47aY~|^tKpBX3wMsc#W+btwQBl~`1&O*)*!7iq>a;mVAe||V6hhNo+}oM8dVKo zP)t-TqCR?dmiyHRuR^*GX?(FrW8!bcvAKZ+t+eU)7x$sG^+-cYMcV3p=Lr5phXl9- zJf>3k^bZa&tX0uktEyQ#5?H=0ST)F*>BE}yDi~qyWRy+aZ`@{PFTX|o6GmlCv@FWk zm=7}VypFcEH8rnZx!}AIIVdck-H_%>qPv}~5f%*^gP2`sv`K^9g#1SeNtqOzQ%V^H63EofI|r zwF0_dDnX>?&EQ#DWc%5+{Dt{VJfxz5=7Q9X??xtzqdEWA z^^cv#KR)j}SmW6*-?v862%Z+3v0UdOmajeVTS~Kzu~@z^GOX5Wzy$4hT3@nM+vr?K zk8+drHlI)J&KEv0fp3AkY!~jnyfvppMLAWj@CODj82TT*2o=?=KcD&5A*5TCbca}E z#O+MuIYxpe{ccC2t_*M8kgjzX=@aK2Op&MrIfxfJQrEkts4s_XL!09v+J9=KS1?~n zhGu*C?3#fb#CD{s_KDQ_^FgdBsRZ~AxKDua5NpeE+;BwUJK-4yciQtda~LWLcZY8X z6#dzHV#%3!MwwwmR0+1Hiiqv9#^c`+l60it_Usxslzcu%#(?KArS=2kc=M?Af08&3k zk)|azV%(?_G^xYr5eGE1dTMPozZpdK9v8{JH!UQH^M?mK7=CAq@L!kyz`d@b@PqJ& z1|QTZX$&8eCkj6VKd?jeE@#z0IjAT+1Rmxgd`0{>UFf?JCkr~-^U}W zRq>bNcYeYm6zN$nkX+#>!sfdqIM+}T_BFX@k3GbKTk6A})O4-g&@`J{}=Nurwd zj{yY-HMIMUI~KS`kiGMOWG7CGtj2f}4=Q{Fo)sc|%FbSPC+Zr8PC&u74< zO+4Qej~KL($woCcI^?pSnGE;|`2G~(!B2i;G4L)?_(}Nr>%w1JUi3EmtBJx-!5wc3 zFZ;VEXGBFg%viV|sLb$AypycBq%m+-0@JGcl`R4%+1HbB_hZdcQjsc5qe?JGxrraz`K zsCF9MIZ!+%*zBLr8a7ew$Q|#M)TX%0NGn4``rW=9T4$9Y#Xb9g%{NUfcGc?sAH}7k zJ$G2NUoGrT4@qUfGvFcN!Xt}^y~B%XMERMn!2M1OU-9b0Lt4DZE@;kUEqR;M|{mgBt&-+M`TzJK%|tgsRl3-fvyW^;1^ z&E7SnN3V%=|F>Ps>1L3il{Wtm_Y+$7@!9mk*cnZ>V~%7GPM*NnQF*|x!*AXYURXSA zI9+(6R4f}_a!Yud!h!EwS*WO1+8^Z;{Ww`UNcR?qwAZ?k?)0rm&}#8%_$H$)QLy;eQq*=mQo zyKF>tx!kv;)_T^>w7y?=z2jf#uqBS3{}F3&WeviM&t$mSwg2wJeKoHIfRl-6nW?d8GK6Fa0+e z9-zLMl&^}8m7?QN zCQ}Jo?HBiQY0OBY2pFx01kVEkCc>a*w(EHooTKdfDXtMs##hgR3-)ttJ?QF=K)Kgul&i$Bq1>+a1s!uc%4 zF}6$`CykDz1Ezd6Y4-`uRVU>E(shqTdVki|PAo8!z#)~v(+uuEU40cnMKz1J{u$C& zka?6{2kriyy_@A^M_3=8H=!SMLMj3N2=3!4d_d*GU{=hDa)KYj^L>QR zJo43d44H{))^%QujnL5QpU*tS^$FRDzLFiduHizu*m!U)RlzR=3SV^a9X~z*N>nV& zGw^x(55`ini4KKKH$HCi!p72^X%S0nb+mknW5^+Kbc-$FUQoWzJ}G10>{zz!R?cU5434YhgL=5tCV%FVSPjWSFDOs zq&>Xc;IsUCG0s0pR4ekw|02}?9IQqfRwNd2z2<()cil+Pq;_$CjnGa{=kDwFQGqpN zyQ~aVcj1UlHD99z#sk;2aHmbeEkE8}$;1v(&En`j{`yXMx# z&TLA>L(AUg`niXOmS*;`($L3K-m}$EZu2R|W5&F<6XV{p`tTDHADLT$Ocym zhdaQJ82pFS8T5Bll(xVTZo5~i8K1r>f{*zVmD0@1{kE_|djTk-+5yN{==Qd>}7F&LvO>qB{ z!k3QfJed(bQL!)|oG*V-$2fK7!4&j(>lRm+6WLjDlKtna11Ct$R=J<4?->(wnDf7abQX?ySy;*wf+f!}9+e~`sSxN8J?hfNsWde7BZ$Bs8D*L@b z^a6>(x4<(l2yZmsieFGg;jZwYo5IINFQp%+qKp%^!mk>9kWZ@?{JRQKsa{C#^M~N^ zWv?#A!wv1Z+v4FpwP!rHJsF(KZSeDj!hO2?u&YExwVxxj#q3)es=4^5eVohfWUnZe z?EIPMuCXT{4^8?>Z|`9j9A|0){_GJmvxGp<-_=(ib* zS5otx7(RL|hF;qiaJea4k(zz!E*n4A@2Smx-&UjM?qpwiD%n3ojO7|q9$G;c<_v5^ zK^{oG*M+H8;(_n)J-Jax5UF{&wJzDeSIZtVGpL_hmDxr5{>_q}-9PRpKH86oXw6%A zQJc2yG!*yb4SfgI(mFK4?+7pJh(c8bBVy`6`Qk;3#KWvh^25R%9Gk|_ zhb0R4gYP*i{6N+q9>*%mmE;d!7Af3&;Y&HpD-+cYb!6Uk_3RBm>U~b6x2s>R$<0Or z^X!4}tR&%IR3xOc(o9sdSh;Cv8x0*FTKf+Tjd}meRvIe*yy#b|d4Mu*U6L~P_V|^n zSd}DF^Jbeew26AC1|iMAF4EX9UQc6uNP^}X;XQG>bJOxvw)lbLF8`Gc+$02Pd?=H0ZUgz#oGKA z`Wy1HoSN}49*GN>WT|0~Rs^1iWbXU1Z8%3)x zt*8X}5%|MO;U3?=!U}q%X;Bc2JcViFEEM1BjMhg zgh#fXF_KwbqEs;op5`um+SNO>Oe(5XvD>x=FVjREM_OV?uQsp7BSv`|uMZF&SJkivU0O)zsHoKOg&n8w9-8wC9&u=&UJ&i5 z!bn@{NCx~g{QM>1<^FD)=vx!zRGop}NDhFsG{(*@b$NZx9Dv}yP~4-bMSJ5r(Uh%fvKYKMCD&7`i^JD zwqgGuQFs!(phS31UAwKU=@5mVhuhs3{`g`vTt(p*;P(ywdi%(Rd{vGphk6m7ULpEA zmPh+?6%o}AHSfcn|6p+mX|W+~x_aIk-aQ}zo($htDHdhPUfh`~3QvI-JrX|ummV)M zX-*WL3NL&t{Bx@|1Nh_*QFt0Wq)Pa%)df5PR1|(0zS%lL-2h8w-`~R@kPwBZ!)WH(KxPhx97a7!R>s{<_Z&rtL`(soAZl z${QL-4Xz=z-XqdG*Hh`Ns069ORo~}#-}-^)^ElQlv^GJa{iX6PH{J>*Lp!jL?}zCR zjvAx8s_&&-C)+z%vR|3o>rGam@X+dijf5Siz4^7%X z>}|FGD+lSlLsHPYe}8n6#()G(I{Wvo#<0(v*#9>xp`KQqE}uVDx6us@PaYP-lbxej z{Zh8@oAAh!!do7-V{4X*GEa639&}FlvXvj8S5eJ+{c*egg3O!z^U(kO1GR~~{`}O~ z*#5%5j_qIcs)y?Q-KG@RR4L`Q_q&7Ho=RC_>G*sjx=W8X#xa=>!=ORr{UMXzxnKn6A(xt@q)AP38qWKbJ_hxH-+{+m7TzejH_eiYawX)! zBQk|M&U%%Hl8Q=c=9OI3CtvSvJj`98u7tZ}pURc&wL`w_#w;WrlI`B(*_7_&+AY*g zn~yZZkY)~#V|G9#U{L^1&l8KTHIL0>4-rwZFgG6@s)|d)q7Z4oJ&}6tx*pBuXA-a| zf_qm8?|A&*TsrwgwKL|k^P}&uC`Rg8DbiLyecGMYlLYuZ_=P9J(~d26VjB@rcnRFr z=7?&7zKAdQfz@ZC@cZ!ewZfZx9g{*gizuhF6u!e*_@GN+ud}jFRI5ttzpof0N%PtY z2zp0-p6dbGr?yCT`=?E)o$`=u^Y06q*ROw@3X~yzU`X#wpGC8x65!?Vy{=+$_+$y4 z02PH-z&&;fpHrC26{@1}hwxB$;TzJUd5ozjyb^wIm++@8*K;5$3V#G&>nYsd{=`7G z*Aaz3hHnfIKJB$8A2HKOl!3$(cv`6NM;ovFMUR509FqCgSa_ewN3?VF!R3uprR95J zA}(p5yA4YVRXCnHDvq_%f1#aLzFPX2mz;eGyUg#?kBpN8AJd6HTbU5@maA>G{i^V7^mlb}_1 z#{6JUT3#EZuII(|!zXc7tR;{jQuDcUaMG{FX)>?Gkqt5}G{ZpO!Y!1&0>h9CV(7DW z`$|4Rgsmo>6jJyX7lSR*z1Ky0z0K1p%omWr18yZeu|Rm>?>jqNS*WP-qnLk4=P~PM zb?ziPwB<#j-Tae_D>JxcXvH~L9uCrw_100jl(dTM><5zlD4?$mM~{b;^ul0uUdvB^ zptkmC1It94T)j1&L6ret4c}QMJSG1Jx+^LQUjq*_`2HWO_v5p$MB!`Ug$57ndxA?{ zMLBWn;10`=sy3u_+b%!8mP}NtZSKFHXz!;6!|RcrULn$W96Yq^TN&=t9#~KsdrD!9m7d?A=@EZvWHZ(ppU3L zB-_0I{%F53h6ZH|Qm0cQZ4@2(nw5o05UJ^!KeJsExqM#O#CbPn{v@qF!QXqg*HCrm z>oYVIloNf719YX_m1m^fIsGDUs7G()YnpWG(rA51KGZ$89{2ZFvTr6x_F{{?92#ys zv~0H{Kk8RWcvND5rm7jcdK-pr7{(@vVR#!0rU;d-NcTPe$il}-9~sjD=2qAn$J;N` z3@3HzqvkWWVVH1U48OPaS;6WdwjB3%`2CB*-|W3HkgpUI6$|sHnKmhWn1%{=B*b%P z?;tzrx@0@Ia{ZJq72+X3jl0eBPO`OU#!?PxC)(S0MEgqr>O8DehS(n7VZH*d{+vpOq$NqQbpmr;HL_OH(OXv zw?akXyW#0Y!nduiAHYXciNg25eeMbG&}A##3KfNW!q?pwUT z-F~?L8sYYvnsLx73ipMdHu%0e!?++-lke?qz90m-YwDw2_el`Vj@A4j_CDa9qJl{be*S2i|g-rmycqT01t*I z82niI+SP2PCkj6Z-|a8@Td!qo;IqF(;fLTA0mAd+K&~@`@%= z_+fa}LE#_$SCG$sQleBn6rK_$eEz#pkyaKeDpfbHtq#`bZ($LJ^z;#tdd2oT#{+`| zEW+VWjtUP68o|I`MYW@kzIt7~4HbbjGD@WRe@*$5t==TSkHGz74C`tiG7X}l@T2gc zlfq9g3*ut(A__kSziRMWNsd%SMd6X~EQ2SHQh(vDqVOnqW}Nt>Zs_nU4|$^SrVD?!@-OZs6@{OIdtDX&Xu`g5hP*^+-D2SddBTS`7@ADKg{bxe)m+}? zN39l1JRNj&^=;P(3W~$9us{s&e6o)|tFnckhG&!u@78o9$EKnj^BH*9>PXe3OuRkt zCR1QUr8IMs*~d#ZEa8TWM|yXyNLvQ{`yqc{OM+IhLswqYyPkfYU3{rP0@*v5d8u}va9##7RZKk;L0gEHYfoQL1sYgFUQ8V$KaiE0N|neufzEG{4| z^%iOLcZVNSGZNqz;qm*0_djjJFib_Uz68(o7w%W{yLPO85!I|ey5C+sgOZURJRs83 zEswv=izg(&Q{Y(!|E2fZA>0u};i>SO246X>Wdr7bh{Dt0D}uylLErmjY`i4O<#rh! z9435h@W8En;D@MGWyjcO&F(v)KN!etGw((A)7!>-^+yim*wQgfIUV>?k z@CODTy(x<4w~A7gYw*%|(a#xIjd@=c)v8iwKw~>jLl)ANNg}P4F}n`^E)qm)_7;0Q z`J$PIzWTjpm}c1f@?F)^T*vTWvKY>LqXX@}vV~{E?-@MwtowM5nJ7F5UUFIViElXn z!q*{7a^nh{DU@57&!+bK$gqSezsZFNdFV629WIMEq40 zUIBM;7VbFGnR==y{2|XvbS zR8)RivyafIRpwEokCATJCDNza)40r4f+k&^n4wy-CrIxY(v>z3y_jPn0bT|7_7;me z;S-k8G7*J8g+K5Seyw2J1=c5s!mY2dniC+r_L33&+A0cP1`iGv{_QZe4PHgz%i%5u zh0l65Gno-5QSJyE_?2kk-+e!5IKLiI?E(((`=Ew~Rws|tyL!{MZpfsd6&S|Gh~bj~ zW%bz2jV%S)!mq^&zu_|}h#mk@?Hq-c{qOa7^9&zoSbMit_L3&@KiDfVEIlWNy(f=+ zhYvnrO9kxU8HvI_y!g^(K8-|_2jnWa*CpY@VqU(eJ~RE2@#*mw#=S*zi?X%izM7Gt z{-n^J^c$IyzM#UD%Tt+X(&m$vb)*KXktSUg>6##iOr9nrz}LVxWefk>wJ)beMd54V zmkplxX?5l#R204rZkHqaA&z?)2CFDlSr31dCw%;bO)DAH6V6@R(V`rLU zY87Zwd!Fi7Y(yIPM5H5^eEgY}g-T#>wFz#s?zn0V_ta`Jj;~`AHHNy5&;Mhp<6@OY&l(+aBeok9i4>t zT@XjZrJ|axz4sz(4b`hYNqrpLh3xDdlKoC`>YG*;%0r~3zdw6ORNLk8t|0Tw#`<0z z!QpQqJI_P1kB=L)*UCb9=!YM1Vu1x(SF}-{qOEfymOiq|5bX=|eLn}*`QQ-^5_hmnf zifX6*oxV?A!@>jUMMFBQ>&Ml(w@85Rg4-Swi(kh!VnLProHKn^jVqs_ZNJl9dD1xR{I2*Z-LgDG&h6l?4{UCXQkMBL7x2? z98)-lx(|LlMR@n&Q@`TDO;ir`g}2bXUHlz69?>Nj$HK!hPY{nWCT8=~M1j6{Sc&_{wX-$G5fTiKU`i zk(1{(QyY2xkv_OC(mvJ;deUl?e(RXYoCMwqEPtxwY`>*J? zVzuG{^EuvN(hDC;dXGMb=|3nFt!9Z&Q>}P59#l23jaH3egBum`>=PqFq~@))FudXm z4JGVtv{^G8ec#cQ6Lko~yBo!D(2Yj)ft0P5J$-tau`$*x!$0H5E1ZxJviG@3c6RA( zu50B1KMXJ5Cj4N>gg$J(BMJ|N$L|onYV!z2RVoS(gRk%uUJ#bSBU42=GvV;d`-K1T z`y6`hDyr3P$(mMbJ|P0>V?+A;+lkltz84AbBXA#Yu{e3W|MylFDhfZUtOJGbo3oK& zyNXieG5E;?!q-}4@+ehN?c5FCTSIl}Baz+>5$P*|&3H1Y1Wo$s<+`ei9)+~fkXG!S z63g&|1o(0I)=;r%daNC@9V%L@mt{0OGEDgKq2A2zs_6f|dmH7s*_c%1MVy|U;*5m@ z^R@0Z%i{-erNrQ{B2pZ>d>cV8O8ID&%V-k+j)o2nA9`PqIXCR}TEgF4DJL*ob3zR3 zRrO#*q-;fMF3<(!L>oiCv@y?~Y_-lERF8?1WZyU~+1bgh@6hDnA=&0d^}*Nw+ks%N z^XAx{Q~jh=dg_bT5<#uCefSiNa%DJ($f?QE@f**}B_IYbwZe?dMoyGOlrC zCtZ~6n-#4%BIN-;4L@{Ac;)$Vt@t|;qVO~DEQ8;Po=6W{Md9)AE6Jk&uBUw|Gebn- z3Gl}TA8yf^EoUkUKMRja6MfvTcbS+`QLd+R@Vx874~#3~B2iJPx;c^1?(D$xwBU(I zgYSyeJ3fOdssz0S|ML@Dweu|rZAhVLzj3}u4?<;Vw!ak(RbRV3k97S5kuLe8ERD}! zlAuXP$Hd>$kkiDesT|h@vTe#GyY95#TCyVv4=%-v@T-r6_xx=$^A;+qSroT@)o8TL z2V%ozr;K&ktmpsy++|?yeG0mS;b!X?)e4r}&tiI0*}{|IroUf0p7;diT;)?IXTW z`%BX(BYmBe(e!aiGs>VOt&G{B``k5jXv4<=WM3xRdaGm~P20?cuRJvA{+VNvw6Yu3 zY^-*-rIYQnO|tDvRxt2Y9-4IdTfNnn3^I^D^c3mNjjfp7R0&!^!81I3kzPT%YOhGW zHoU{|NF|8WeA?CUP0!`TXCf^$q;J`8W6@V7z^}sdy~QGa<(yP23l-&XufcPV3h)0* zi?z%j6V)o*@~)rW_x|(dA@#a%7THH5CA(Q!?G{WE;-O`?d3vR>hBg(o4$;t1*W>CV z*w-=Km>`Cuvu|!@feKrZn%BqiyO&iTCmZS2vm$*zshvIDU=lc@9L28)&vEU8@pEI;nCL%TO;2m=({)Y4pQnw)0+=ZDHUEZ%ZWQ%MKx=W)muN*kbQ$Q>ZP*+vTqvM zPda?<&C?eTcp==gOkCHbRGwu9f+)NQex^eBS1-Leonbjqcrm={q41{NUB2O+WTG7S zJ@~$-!h?o}=5hBD)v6MEfBSF_qy*_r>l4zk`z)D`ok|d?d8xe{`=x$4zdmlgs_=cX zJ(f%MtOn8N>BZpzFNK#Gd|C4^K4#8_C>47EcV8p=4jaN^Sid2vRqVZiUW1XAA@y_+ zX}fpI7}BT&O`7w=UutHm9BGK7NNYFh%_X4{;1%#?8-&j+o3WpnCZbqBg!{V+Pru^j z#A}O0#oD~u>KyN#jYTEWjO`-5|Ixq0tSnRlH^?LSwH?C8{NOv1tw2QOBCZH~ei3_J zys4I(AEQ0DQ?x%Fyuvc5%78zCKk*RWVYK!m#5;Zl+aGMQQ2r{~h?4qu+$ob(=^XI)4>tWuX$_PH-QCHz;!( z&MpR`SUbZ{c!<71O5*P{L_{^~;{op+!(ubitGh%R{d*-Xo=SkbC~Gg_;|98Kp|eI5 zz6I{)BYejCpg~p^DhhX1e82E@W9l+kS5f#@cv+Be+qR>AVOf+Y+)eq13cqryv_G#V z5T)wd;O7mV>iXv+X7`C|Rln4`GLTDZJJNNLVlk`Q$N#Y`PJ&3yU#Um!$HwPTU-&rQ zpbdAgQG*?%Z#2?Fqg*&bWdh#`4>~Qj6{F5pvZh58?hap-D7@b9J$Q_$DBJ@cneY-82$ovUW_-^>t3&Ka|CDL(IQ5u{*@VIQ@L96a?DXXX)&bH_O zXZF7T+;Q5;_~ydl-*ELL+a^!4r>q)(lqVM+a4)#qUEveoPh*lvMd5qlEAoXe_#uf= zvx>s^!Os;5A8_(NCRbDx?hP+Cc*>LMOhBn9+y}m?So9sIM%7~MN0i@jKisuc`0nBE zjK)+{s$RL^*`W07o-y08@I{*UK%@sw+?Zx%p%UPJ@Srl`>223dWpqUp?hlVH7yj;R zU(szx4J*w$KC{@+V$Yj^FO`MliIbG+L97Twy(`8)snbfE89zF7!UXX z_<395U;gru1#b-yg$Kb??1azH+V9VtI#GBq+|ge6toh;0Xs9UsAUxRM2b+HVJ(n9% z_#t?t!6(dp%a`V#C_DtdYOVP64n5S3FY*xO#2$v{82shwi>z5LA*x*y2ctrZxIsdZ z7HkxYlO<)NdEJ8qX^o1_Pf(}%{-yUhdSrd5rjNo%ciJrJtzT)#_)eL?!{Poe!Ygm4 zzD7ez6dnOD-737a?n$2DDhfXWzvL$T+LWdLurNv#eiUB0P59V&KbjsDrYKziw zq=|kawH)~N6dEoPu!x4+9uU6JZgeQG)DzWe@s(X2Uo2vfJ`NP=jvwEn`=b)DH~}vS z5+1c{>Dzqzim3Kec{R9O9gCC7;*dz6Ubl^8v6%$;DfpI1;Sbw?O7BNS;j!>MgV&0F z`z`+aohUpGo^S9a4lb8iz$Z#oPQ&d_h)=5@$MX19QLQSY4jd}L;tbMtCq??eEr6Cm zCBWn1I}QG1Q6LXR73E=>po+XK`pl5A+z2YFKiS)kzoGY|OOj&>wDWm?eB{qsrC$E( zJvASAmO_?akwT_y?8>FAiqfQYYk$y^dY(fXpDof}?&&GCcqG6R;dwd2Q)Yf2Opk>q z)=6-mJmLTLe;7dvMpU!DwK!@y*iA$2v*sI5M{~ZUFzfCmy6-6%=Gcqj$ep*j)RnFLf+6Rh|4)TgVxKyk zf>gA(H;eY{u?0L&RECsfK6IB4i}BXb&V6=aWT%n6a;s#o3bs1QM^W(*Y1wRTgf)pM%tcsnZSjRi8R)b?yLUecMSeWfM130iV%y&*X$YUs3>*4 z1`moB-sWA8H7o-Y)#^IRZHm#eH!D_W-G8rZ)qg4cQCkYi!Z7W$7%tpbms>>Hatznu zahbxqSH3rshL5ON1a*4$bH0}Pwhfbf*+^|}i?qe(-fyyiMS@nRfeklq6J)N)77SZx zDJb;$yK4*5H}(`{)_hbA3Tk`s9oX+V)kkBtiVU~ZWN z_$_#PvG9tT8H}b>RLu^-;~xm$@ybL;o?}Gi&U|4H#DY3M-_(k`dnqKX)~}Yiq+3@= z`u^z7+^ot((qH(aw|mnUUyyY3j7;yk&^T`oZ?jLS9eqBQ<@N>TK#)9t6nb1{IXTo$#zkK%&Vp{$x=P&3os0F7Q?e= zoO&=Xj;$tL(RJ5h>Qsm{$wj1T`?g|I%UtLpc@IEROE!IS-3sq_+)e z-g`mL>~tgnehiGsIq>SuM0g~OU-IO>h3*}ME zt(s*yfyyKajJ~^*%?c{4*$&NK+E%lTth;=VhH7-$(?O7VO^luYwmvl zsbX1qIN%dbBgSHRq}{XIC}Q3CG|pKi(!?twecEp)6N)NRO zizdBUpUuBS#o9d26Ao7vWAPNJ&jXS688?j~n@WINUuRj^;0{B-e89#5qVQ$#i;qR$ zedqQSOn4B5FNZICBD|@`H#~?`l&aXkZ!SA6jm3g`W10FTDpfI8Cco>ua4Qxoke*&H z(!uZh^3beH0v5LLj1|HUq^WPksi<}|nZ*rua&xRiy3byuf%o11V!%p*{Hia^aSbkP zF`44*(1x!Q?UWHU=+LSR_$qj*qv0|A6th$+3b%(}+bn$5;Q_7D6NRrb2Uf9iPJ%0flq4)D7NL_hvX8wO%33U`FN927pSc{{FD6@_nr z-!%Bx`dj{E(u63j{zmx46QYl>E!o7Fkf?SzwbKeuYpD5*HTt{h{;gxwm9z;%n^-Zt zeCf_YD+^`I$#8;SJ}Z3h_(^y8CpDsSGK$YX-{-dXotVX(V`sEcmqhFO-d-*ll_51S z7v7t_vrJ8kZbo`7S)@~L7k$985D7fsUEn3@!rP@5!&Ov@d*RLghsEn}Xa_bf^f%Q5 z+(P=POi5oqF^1EqOyI8Y)7OL_`)nCUp`z4yE4;wq8@DxR$s>ZOSewt^`lDe80id z+bvAv`9u`H3%>KA==&AF$0VJK!gs?H4Bl}_tvC3~QljuZ@EuP?zpZf6r%YcFg?qx2 zp9+6{$X%wvR21$7U$g9tYG}U6ia*CzG@|gm@Ph`Ao$`ezOZi0M``|VQ9HzHbVie(Ud>p9`kM{EZ2MmJHtnf0GHJw=$Kxr`dT$-_t2y)$&Y-YnMZa$b$P zf+?mfNs5W644}HIuv)_`55kkK3h(RH{~|vT(f_@BZ++=!ImJ9YPk7kxlJk)M)3dYg zUazcp||oflWBDh;puu^JpcZB7ni4Uma4w+Ike6%zdVI{g`iE&7VWz5u}!Qj zR0jMo{HDQUS2;6XprU;BAQWy}A^MV6J25;_QSn}V_W9ymv-b60ma6UR_N;2{&d&4I ze#q6wI=a&shv8^lDUL7MhSy`s3|~#Ueq?~r1vjsx#Lw;Zh0}2t;sWWphGXbw7q9M~ zQ8{b5>Xoe+ny>S`HZtZdL1v%p`=Kj3X=wDw*D5vCW`Tuz;zUr!DWi;f`HgA%R7vn7 z@QhVb_M2bUU(Gm!DEuh=^m^gr7k6OLt)l!?$Kc*ugzsoGt`SczqH;QSBtD-ksda0< zS}ch~yUJCx_bYy!%J_>6Zkj0gDR<$K{?lr(UP@G|ZJw>SYo0ld#c`xtJVa_0*7`#} zm_-5>(eR_Ygxd_PJ&O-F64fkvwQQz3Q!z*#_lUIVn!COD^gIbzoPbyE72cvS?h2hF zqT0#3Fxm1FBkPk$j|GZ!?SV-)jI2q}qzmj%JkTmoIDX_L4TV3R*j_{P9@SW(p(mwJ zcF=Dgr=zZ>)0+c%9N#)ap9Lepc8TNWobjzS(CkwU5_4sOZ@Zi<4RhA%%V z{9*s@H1I0QA)SF&oDp7-RKnv^MWs^ab^WG~wLVDe?7eCPcV0Z%$1h3trE!%h?8L-F z%ignjt*wUMEl<(!ylKDOQ_Ft|7+$(8hV|YYIo--a+0rjL3op$O-hECl=JHikT+NO` z?P}lkmJ7e))bpNE>=etETw3QyFS#P=g>Q9aN>iC=l{)I1lRym;k-BAyw0Pf{a6XPe z0?k$u{BVwNm#S_KyvRsYihE(C`OVXc55(5IZ?SZG;NnE ziQ6>=o>M8j+x8Cmd_IAwlx@Bvmwz#(kyf2YDGA0_QnR469~QI|l{qO{9^TEk63jgT zeJ|vw-esyP_Nf&6`+vLk^A0YBYh@&?96u3h8q&Ds397}PoYAl*`+-Risaf_Xbv{w9 zmyzyUEz-AVG_vK(9VBS3$F?;($oWV|8n8yBOY&c$0xAKX0Z&^ie9%#~%UDIRz5;i5 z5FRnQHY<-Rs@0-a;23KL_L)c@x{7q`Tub%TCqXX9BO9JSMQhca@t&3*JJ))R$X@sc z!S+MF)q=`ZEc4yO^1=>V+GS-7zXp%rDST$9`W>w-R1}^Czvd-8EWh$NTPuii6xZR` z_Y0rf@_akK=|WVhVcx6rr^a-|A{*&rLps34eFrakkO0qtr}&D+tDf($8n2?XRyW}J z!NMCa{j86bg^FtDKKrXN3j~?pseE^9pmVKl)hut49u_0%v*Uh!nTcpjwDdlYjv4=% z`NE85cu`WR$jpmj+UU*3^+EtVM!WcF~AgKWR08 zeP`1^^|R!We(AELN7wXZI!KvlC3#G%UPE(Sd;Vj?(X7vvx-<2ix~W5s1;_=T?e_d{ zj*oeLvPr9pW&ep^2r{RezWnTZJ&r$gqMF5|<_|IindkCV&q!nW#Y7*T zI5L%oaWRJX?u(({;_M1;BW$(o)w_POk)sS*^ZdwT8*Wp*(0iosFO~E;FKuvUJ`NLj z3H*t{JBFNnhquRx@^P{I@JA0sKP~>}Ovb)M|2M#K-1yeB0nWF5H>nYKDQcf`QGYXQ z^f+d0$l)wJfM0$he88+CS4O@>wX<;5wZD&sW?%oQN<$Os21W79lwo*u#aZ>p*!^z~ zLwjYbN#Dvir&c7&k*3*-)YfekQk4L&fG=Mu+^%SB4x5gMV*L=FVJE!XlmuoIR8+H$ z?bTwY`n+N#+T0DI?bUrVBYl;jX@98yoxV1>sBKh?sFHqtHo$UeblE7xe6|i~{f03^ zZZ>?MZcqA6v-jHk^{iU<)hr*Ws_d4kB#%iQ#ELc*60La&?Yf-QM3C7kWgb{+40(MA zJ*&#LnE!nr+)QlMAl=wbZld1jDvW2@mgqO0WnOr5=`POfW2$m`pH!vIuI_vIbO{xr zrFsHC<175g@s2!jR8%{h#x8&BPfgd=Tk`1xR*~%*EZH49STb}~9+JJX`?CsMKYcG( zGxT%pVEk3q3y+i^V%}OoJ)h#}e^4BKvb`s8ZR1<(R5eTMY@Y8YjH3Qc_?k%t!vA~K z$NlU+;}OrW{z1IcSh>$$n9{Xv|3_V^f_bX!F8@|vtJSF9X@fQNca`;K4PAZp+Y$|p z`taQf4Y{V=j?mDcGoMw|+F8wV83*EVMGmBQNih4EI&wIgHY%{&FaNutSCxGxXOctv zY?Q@4Tgt8`u1qvRzKo#+}c5M`@idbft5;oC^A0 zlL~eTcH!xxsws}<>5K1obFzjmU)*p=D>t-Dr=6Or+MqY|6Z6-VN9y}5HWV9HEX8`y zac|FR1%-2ku7GEj2>-FhRYr*_Dy~}xKfA^*z1mKn%m|GSRtp%mWM`L3c5~aM%u6c| z_)7S`a^ds3UQD*KP*GYMJNUsz!uvbFU&)6wh-!z`wP30P(p5;^*PT=CU2x*?A-qRH zf=JDOn%WYvT208=-70G1WLT=9J1CzbEUrj?<|@L6p53 zLu+R-4BGrY4XCo!s%a70cn#-o4blT!M7p}LH{&;zph+D(S|({|=Fhd&H2hk!ce_e< z)IXUqY)-}lz7FoXO}O*U*oo|iB1&oN;g7Zp5AD$A6~3ZIRI_e#b;CazN?bVm0uNFL zvLkj&_D^eqXr+{gCasFMi!{0mS2{d9cf~&T-c-tw^v6c}m{j{OSc}Dkv$X+!$4_i0 zuAiRA94JxEcG^eoYP7f!={-aGd(0|UkW~T}n-mWbi*n!hmM|V7Di-EVQLq25M_4!^ zJ%3oF3EwWEd!Z8G&hWkA!vAcVHJBwBqMWkL@Qg^|HF{)w@Q)%y#oBx%Ob+U8Je@8* zecG7qY{WBzr^Es1RPl#X~!`_~B_sk#0d6enq4$KCC~J&$N=DNv+1+QV(cX zq^GWl^q}2|Cd?<10N)A^ye|B3=%S5mh9nAigGUt#Z~Y{92JbWzg>QrVmI`0CKIL_` zA`*pfhuiM%}za{+Sy7^37w{);io67X~8{Y+iaEW=)|7KtSpoV+!MZKoA8)VYD}W@Ocd?~ zPuwMZOvCY)`9n~m9QaMX6OD11MBouBBdCmh2^MX8D}JU>i$!#P>BIV!3h z{ixaYQ?c+&$MGmZ#)ob;GBOpFgs0xNX-?mZqb3ewd~AkNBU^!)7PhMp-zz)78{1G z6H1v-RJPP93ZDE}3aT~#SFT?b)huS8+oN{f9!I)qS(3W*yXhW6F#$DZ=fQ)J+A5*}tR9`k$u z*MWHkqT;bH=6Tnu#ieD@XiuR%x?Z#?2_J>A_nZvTUOD`HRCsE6d@SuxEZRyZ(Ppfl z*PLyyWN3%|^6j+48tUvZ>n~~>M|P02WdB}cR&Vujsd>$DJq>r=CERh=lBGPyh-wzj z!=D%vC1$6xN&UHMIr|LRm%Su==ak-D!O8<34}WCv&+}XQ^R6pVe!2vB=swX$TwBBv zor+3n=FK$j-oXY)&m!FrAkwsdyoWJ=M}k(d&JR1P$=`EGR|bjn(#UDdBB}&U+A*@o zgTqZk>V8gZd?mN}%F@`6qSy*p>PzUKnq(w1eF>Udc8*IfO zL8Ru%st9Q~gu}XoG&)wK#n-+*!kC@}P1+o&FJf7P9>XapnQXTUlHK$*FP=5Z zL#xxU4~{+Iuu_m7yd=`^>io#NiYft~3SW6yc$3fG>C8L(M6phTC#DO3H_O47mjQ`t z6+50@_A3^bkzO{WpS`}GSr3)Kv8BWFGQ}d=;~TmLDymsr8Tt7Dt-|pa=8VBLgX}d| zC41b60IqxG0lxx&k}bTY->}X6K18W-CVX>_@Fy{M=y9s3X1%CE)6Gb)A}!1n>5wk1 zczCG`~nNrQ>e&W3M6Ia#y4WZ)LI5PbJ8GUh$yDGws%|3TJC2*)ROol8;Ph zk?!rE;so@+!?WQ&D}^sVW7UF_N|ZB_1HZ9O_?3kT^!ij(iZid+CfB#; zVsQg$_1@6FaY>^5iPI>bX zi<3m90_KO815YPMWpC%MTElmD)}sLadZ?t>j~$Z!9`i6 z(mAcnkOTj`#u>cJaito^! z_uPNdPpi-1)Svb4&V#*e;^btc1wVhBf0)vK5s&jC3bqe03Qq6i#UPmCb?xa{9n=&+ zG1|kCqCK9qj9zsV8B+Sj=i96XkF{B&Rp^hb;DH*N_t+#0?HvfWg_nALVhsxDcvbl@6)jXP*7a@|xej?L2Wmhm~mn*&lLylb7Zh`w131!Ux^*GwU*(Z*3_r@BxzcpewyjG|g3Rf?i|`=`}vN?NJ72yO5f)Ic5&PE^B`2lLCBdrr%Kj?&2H z;T7;{JbNbH&CZU&gBu2~iVe%&4k zO!vcpRK?!&e6tb1Hu!AgB%!bCuoSoP)YL4p6bs@vdh4HD+$(>MVDpknh-+&_ar+$D z;eh?Fh|XEx`eX8aq^Jy4HwRL!?V}Zq|1ZLT+DqM&_V#kJe;0nD&O}4!Am=gozT!(l zKWF`F&4%{7_?=D0-R0LJt_tFox>8*2N;NIq9*E94^m4xUfsojG>Yu$4X5hqXkg(q1 zO$m3{!Z;<~Nf@U5Z=>Pb!IE2g-~5h-{1kE1-6-x~{T#2$NV4c$kjnoS@DBi&kV@et zKupCq;%6vZUQ&g}XFlX{ZqlAebl>nx9>taZN6MXl=L#p8<$8zGt`I*mHXVOv8>g0Y z=g2G$Sxmp>KuF9*X=w<1k~~8ydLfib7pK#E@p6oW&>qyl-$W9Ba65b?CgULGT==)z zT!ssEsM^Mo>hgjcqp&9i2H2 znvnRud-%Uwx_q-;slDbg7o_*OeH9$q78W(1EwO4La9bS(R{3YN42Bp8&jqgRE!l-b z61{x*MppS-9giYUExO9ZHTW(mxEHUbeMB!s>CX~U+DPT8@)!1a&^q)N=E7J)WNzL* zG2CfGyf8k{oAj%D*if;49hY5hKfALWnvxMIJVeBIEc=+X{PMS~g8CfJ(CWJBMM7f2 zRT(Nv35okDZco!=>*g;}gj_8uf{*#lCT!$KK{)HKC;ME*J@N{w?k`Do&7wJX@p%9Y z;6evH`xWti-}+*3$)ubM(|}Qr;o>z^HQtiy)75O-9y5T8H{ccq#FIO-&6rHexmYx1 z20MC07piH3>O1GzX?SOY0q#^iaMKUu!soVGInMWllw61p9a-xER|tvSsB8XLq4ySl z133Rim@yaIqQ08VtG`8zcp=7&KFN4BW|0tEA3V&KV%PXJ7h_NeDY+0&+J8N}%O=jN zjmC#T9I`n3(49j|qk9)4_B+H-wxbv~pO5mues@FyHvs==PyGGd*bmsW1u2FJ@4=sa z68Kn~gP0YAlw6C2KbyP6hl{pwR5QOm_tg4rI%$bhs}5NWlANJ;;H6Mhg(1Q=eWtK0 zmmk54!FvSfRPWk7H76u4RX%cU7G^WVUEp;d@Chs*DDID!eRBV)rQl8H-Gjm>E?4l1a6*L_-b!Tm%ESFb6M5C;n#HbaYuv$|a`XJ*^Ag z>MWr8vw&2!H;i~7BgqV?!wghz-!Y|d)q<_{Swc7FJL#%6s$zbOSs>g8aLY>KeTJ0d zD={YJsxtC))C9P&f@)X|ss2@Exd!7P7{G-!xM?l%M!Svvc)CN%xo~RT&8E_9pc-0F zsuv=jVXlH1fZKvUS59D^quJ6;ScGCy>19%O;1>GCz1^NRV;Kh0UtdT(y+@rS_8Y7^ zq*uTNtnXR#36AaIAnhGFNZ0#oAHFz*8*m5k+V{lcRIlO=VN!5M@HT;Oop142Mv_Uv zoxqI^Nx#PvIcdz3L5i|FgWKB@KOeMVIKFs;lu{7~{oxVSPH^D@)i^_}WTV0}0yk0Awj1OF~?g&ogM;?G8qB9%|zQO>0Qq0T}M zoAV*1RKzFh>C$?3z^OY_>s?9pV4H&T>Bb~_)uRfCHVsJ^Kr)rDie zVl9LjfQN!>)euiOz3z9cT0jaO2L4&#oeu6mr^lq2?F|PvYbAZ>nVrFzl&)`wDb~6k zp-o&G-iIf$4j=;NC9;X^F14zNKse?EJQBP>j(Gj^%@eTW2~zMVaK|Uao74Q)q2!Q) zM}yZtBfipQRtdH{LJA%OuB%3T-;l50&{snW9t$2NaP$1CS@;whQt&u%D|OP(cj()K z(?}r&j|X>oL45w^8z=C82uM-mU%*YYi2waC4MQ*{<(llhu8wS*Kmt@hzarIn8#k0< z&L0NgiQs0hiMM`f!m=Zif+vBS>k(Hx+6PlTObVV1uKAYu@0Ujw;Flzjf~SCoz9W7r z`1}yeBSMNRlnVaIgt%)zo1QX~OiEX%!w$4cjZXaZe)jkk@YSJw22%VWO_W7 z@=5S-Uq)T|yz4Ps`dq{fOrf~*wn-nsO^)dNr6039W(AiE{<_1?y2^w3n^ZFIG$HIF zS|*%u(dSROJp?7shpM%p+BNmtTyz64051UlCh*z;(zW=%5TxMWz*_|VYP-(>OhiBm zUI-qaK_LfTH!;H&DoDYL!2Pm_&$Xz)O~Ryjc`XKSD$w~|exJ)`yZ2dPkxvXd^GV@lPHX4WD@C|YrAS#zl~V3AYu0D1mLqXaRsOYI z2B~<0#Q8QQWVMl6Oa{) zMY>|Ogx|1UM1ez_+5<~n9>>3^E-Vl7<)V}iQ2WjyjV~8^6B5^(@=mQ@kBX>7D#1c3 zb1fFDV1p47Lfuz^Kh>uc|Lu7ME4EC^c|G_*ojr@Hp{gUO4(z?VGq%^k04{34-@hjp zTb++$48o-3LM)|5in}(3AGJ`;G$K`FHI;!FGs1w2_Uvu)01kcIHkEb5b+Gm~ChOCG zHx(%3Z$ItPmc}x3B=wlTH&y6gmt77 zS-UA57>kb;;DamH<#QpwaSo@vW!3-Ykw++G}q)u})GbdwUVZ0-WT3_{|GPW20l+4#8`4y(M$VYFsxkc=dA ziz2mvNBa>U;8@xZhn_)7F2pOfIB;_#7u#gDkp;ZAvNR*fy70|K%rY<^@Y)9cB8vE~ zE|ueDB$h z^-C%2mIXqbi z{cq>7_lx=EJl-BU#G6AtHYY1NRBE%$6xUw~4qY3_q1V-WQh4)+TP`1&n|Z$qmWxKf^V=Lx^3*@$SlsV`wT%UO(=-x@&=3{SSYUKO}qLJqPQI% z!LCy+g!xY~NLusN0#uM1JZjjHN2l&>$FUC!e!1X32Yiv`f*gvrT?%V;SQk5x^_}@j zTd>(2J~->#hS%FUbbZsK99+leunuq}>(zaRhhcjhd~m8$W)+=6APuNGx{#`7>mW>; zG6POEEu%*rho(MKa=@LU32R?>vR3_Thb(#l_yB(aUf@amRD#P5Oxr*Tt_5D`O+0a` z*G#-WK#DB1!4p3d?_m^#hR387QoNq?HyO2XS)|q&KY-Vlu-5Y@>-ig6_h6O-KH&8g zcx(vqrawnl;)M!Q&P8G7)R7!o7Cc}NtaV`R5=qv*cO+uAf%)KaN?tW*GiN=fTUs6t z&v*@M-*~bfV)_x&Bh1IIZ_5-0{hAtTvK$l0`3(N2v+#5gn^fE0k*&CE-oR(h7xL*8 z*|-av$l#e;WQP}z7`Y9b&;)d$>y$*gdkjutFv~0`k~n~>kM~H1svcCWQ%N;6J|DQ$-J1<;Ru|1oeIVn8k#0#={o;2T!9k8B~#TEK^-??Kr)TtdlYDf&GZAh~ro`?ZcCs->}kswFSo z0>evIIh^YHpZknBG|Hgp42Np}9?UufBRJG+B!~U~xSNbWj=(LrG5AM;NB?fJ4TmW~ ziks2|JhYkgAMZOYiBS`zP7$hfl(!Hhgf2 zU37fGKk`v!T z8*cN1i=43S;h%)W2BGLUVHBrT^QW99UdPRmi>fx|vLveaCd_IhBMRbB(tc;vs_6)u z6~vlYb)}X)Uo2pr^p4EGezP8mok?&)krb!>O8a=(PXj_?)dsJe8-u5%C9E3^$htx5 zC)U204+`F46gE=*G5;mith0-Ia>aSDYLFB>et^d~WAYex_#-+B=9g2Ix~KAp%g5nB zToA?WaO%C;VHNiIiWNLMnUcrWVB@ctDu-V*VQcUhYvTTWZT&D61}V7}KY5s~|JaEO zo~?RVhC^ps@AN_UX#N?E&=l>iQ{zB4H{tHTd%5^)P2UJTtk~Mr{+;ld zw8Z7HDaC8pHa-W0G4`e~AEjklF!P9Dq$-v%eOlc>E=Ky0&%HRbZPkDyxD1YPsOnD+ z`%YVo>&@J9s_V~c{SH+ps8$7%szJ?-7<{P&15y>6K;N#mDY#FZp=uaHs>5%~q2`zY zsfuZOc%QpNsQJ*ZTc>>OG4?j@0&Al%vJRNuItMcz@WJJD{cWZj{=oMUs*$Or>c0Q^ zc6_%4ga3V&8~fZsxTR6=H_lmAaULEOS}Wm<09SZO%p(tlbF^G=ItKiZs#vP&o~;Y$ zy31FzZw->1-y&>dh%{*LILi+zV(HUocIt)k&L^m5 zYLIGjk4xY1p&JaiM9)98@c3U#iZv5@Oq57f>BuY2=jrVayiob>@M)++K8J5K?1S}j zc;=u{1pZ>UiZSnC*(wdIi1d#HT);P0%K%ab1bFC|0&;lCQU-?!DhQG8E$ zFcv(#c`@b>96Jp^T>Lw2BmYBl_F}~sRL>}T_+qUS2Bey?@>ipXm@9RHvmVvGpYQ+? z>+|I81sl+PdBfo=W6C~#MS>pwFA2A(6Cdzq2jWp~YZhZ=5K_+Tq<*Fj9D3c!l6|b@ z3u`+^vMw>(t&h)=-~-$bJVfBTPI#Zfp}df?S+ma&7<-bz>Vso3&BMf;@4Ug24|Ax{ zx8D}3YFYL6mENfjBZL8{*gYuaE9-KW4?|n{JH+w8Shly>AE~JOQ7W-}uUO$t1qpH1 zUmMR0Yl>ow3;+DamL&sV?dea}+m58MseSl>*Ff-(k;El0mmZXnWKz!SsVzPDe#ptH zoNee2f^}s)S&tr5It?><@BtnS{w|StTtmqeY&Uf|C+t*pUA2~sXvMB6ww zxCn*n=Ol8m+i4SCt(XB^gn=ui5|0h3ScDUsAmv=FRc~NRgyB$aNh8(f%HZ!PGYs%J zhybt6B!2GMm=G**LCW75YoZ?N7;A>~q! z+c#qiT%UJl{4udcf2|oR}@n4 zT=1`v#J9}pjul%bl`fKy%7fr-90{zSNFe|dQ$30u<)zI3g#T(e*!BO_#ZLNCKZvVt z+s*%P+NEUE%2Lu2f4pFF=QRIVy+9p~4zY(AO4&zsV41iY5Ox>>N^Q8m2|Pek~@pt=-1w}iaTbB=Mu57r^&yk2N?lBE0%HQU!&4egA! za*?jQo&GN&@$|T%-X0$~t+_|G#G#VP5ZCx8#cdrPg8j5CItA%48?)ATtqPgvw*T7d zru-I5_BL4#`xL=mqsKx#TA3Fv)X|JZQ#q6_X}6F=_2H>kDX^bs`v^{b zKFdy?GwnL5Z!zljJ923faxw4n95*`42yN*HxKT5eapCn{53q#+QgR_)F<*Thw(3^_ zRl^oiO+B<0)xiv~P*4e8r;yIN#N&_U4RFphq?`-mKh>6TNMc)r@a7-}npQVpBbWZs z6YfGfCGCIB=s&KNZThG}SYJg7yLyGwNpvj;4qgqO`il55<3G=16agt4>C`|FrbB|A zj}KrLjESiRJ4`{HDX-zDphB|ZdvIA@d_R)!g~B5jm~vV*V`gY@$VGdjCvvPsD&K`v znh$R}iXS#3AzY0*aARFcao4M|A$V>>N-o4odUImhK&aM3_1$|?t@&H=7RGHbAXT0A z;|_*>cVzzqYk=xULACJVFkE|PfcD)8u3#?I)TFnS82m#@71H4sfAepT`i(1u#gaYV z(s!hO!d%Ib%oCD(VW@cwPB_)<2idc^{3l;7xJf}e+(cHtb$vyw!&gC?lcq-#>oDUW zlTsFivNs{JyE8=|c=b4z8d-cU%#MY~bBQS3X1Mn8`S|8%ON3%f| zlY+N`2l^6scg(`N1(RZ{Xd8G;C~+C%M_A-zQVOZr-Y_4G?#AEV=KneU!BxqT$tU<> z)VxwZ_Wv%~0<4)tQjEu`Tgow9LL~I6a^RWi#OHV{--1akNV($1d7L-kkd%H5JKawn z))CocU1FByjRQ>KgUhKo+>4(!&&$OuCtCs)A85~K+OkiQ6yVS^ha84o^2g>H=9W|S zJ+Y-XhA4_q{g6+pea2mRjz5pWfG%pYc(&V-nW;P2{rLpSauuYkuu2&Z4`#xZsqDvL zVTX-)Kjc0%5zf8s;BrlxSdH6k&h5k9r_Ac6nPPa&9C8icQzH^N6w4O=y;zyQ zFJh+GoJ6Bgfq7{wnMZ7#6^fNSIN|b9k6t!`khmYISD|kxuHjQyE4PvLr{Kq!AYnc@ zYgy-K*QEXN@eFj0USzQTJ+n(uGsY0G;1Ug7a9J1;iMjs_eL0=en)dYh5)NIz^S@0( z;*@Ajn76QHszbLNuNNy6PW0c9s~ttop0{td+U4%vN=U41tFBTr*t7T<3X!Wrg;<<4 zLkoXhLs6(|JIunB@0cwt0f@=GH(I`(T#6`P+vx~biqk{;*KmP%xZV`bw)ke={&@87gGg z{_RM@jHYt5%jfVIY)BqYWH&mTc*YPl9pHvk8ND|2K`2Q;7l&;p1YFixZgDqHq1$=hMuiTI0hcU zIfqg8_k;}~VvLJAvcf`$*eZ`F%MRxZ`x|TS$G6un5F^HeVl4e)?ShIyBu@38Q3`zs znJ)WP`)BXo6NY)AS?#qy%6Ih*QWHn918mx^QFHF_g`IY(>ls`TEmk-m3T$Rz<%TT? z2v6o>+ROHR6efE`6#3$510G7+?27o4^|Aim=qZ>F^dK+6Uj`E&q*}BbPk%_c;zT@B zT#uga6;vI=NcEDkln2f-h5;qpVF)mM^Pxb_yrG|DG&0bEd6HoM-0Q+iocaYP_$AnD zaKl(~>+m_DC+1HeCAS^^29SBvMR)-buiA^A3c}Z9ttRbv<~EbQ{IpWu#e8vSPNi}VVgcR1!V8B&$ZNSdj~>Fl&8D!^Z%J*yJOF}&zXh)rcto8Ys3#ZO9;bD|#(7A&f)py}3In#HRln{)v-8dT z+kVN^e}x4Bu~n&rpB8#05&iWf{~z3cW(e!qOksCzNyG~Y3(jSJrE|$U4h8EDo5Z%5 zn#25uS|)q^wr-k_>Ss=xO|ph{ zr9N59OdpSVe&&Pn>F`ZU_>`fWh;p7-8~*K#S0I0P7xxgm=yN?qKb z1mtal$W;auxs%*K_y&^2CspyreIwiYjI&-eUdtTs4Ysh(G$iYK?LO#UnGep|tn=+- z95Oi*tI0WhYXA2fTrfL0Of@El3JY6T;A;%H1-AzeF(H1nxmyGV+mM1gfIFKKkJ>Rc z2m9b51$P855csj; z*KN08-{O6QwXPjmPZ=~9GhECEIz3nLpN_;&9q@cCBgv$k*Fn~uCgLIM237lyq&ohH zE~fFB0ayADOWuy6(swwtV4q*va%Auc=3fN!iR&L_;Wz>~!5f@AxJCfEy|!>7dT1sk zA05WcCtt5;r)GLUHz|~KzrTI+0CfNhNS{dZu0$bK}f_E0}wA z!Bq}f=_v?W;&qv1;I$3;d%>Yv3_0xcau;5Qm|NuJ4XzhUe9q-P@9k=CB(x@L?ScNLAc%dw!&$4qyGz?oPr_qw;Oqhltxk zUykJxntolzg}r_FBaC4wg>kjCtHI$I2u8Z%Wirkjx|GoOJHH--R!1MNCnUDsQ(H{; zb12`-Q-$*-?JdQRrBmVx*ra3tGVv5Lk$ZX@Pezsx?&Lu5uQilm)J0potT8DUXyQ-{ zFAhaW9u*GD?l6laz1Xyo)WjAu#OW|Ql`#lG8e1ud%Bp=BP_R&(N15Fv{5-d5f%sP-EdIAj-{D+-CDom! zT!r-Yo-cHO;`OwR(BTKcC{P@dNfnZjOjiDm@6eDEcs#hX zBPF>gNo_Tjejx?_0&eC+eA~Lx_xNQ6r06FSz>WQhyXt(k!#EF8t^x|fn*Zg{?i+3P z@R|tgtN^m!5*mqN0`mc$1a2QheDRz+fmkSm6g(NcB!c)2e+fM8m=rt({9`2X)3@#` z%1AOPE>9}BTN?4&nflm4$)sF`NX$wPgNrn%`hF$VYWd-KpEIax|JwKj%ehPn zo&o+km-M$3Pc+5&2vSr?CU{5@aSNCJSmTY>> znlK;mng#A$LHykKqB6|yL&~}MdFdkGF_}#)VW*a7!`h>ctRIK{gf;U))?&9dW714z zB#;Bu96`12(z{4ZyTSl2a=}{~$c3R@1D2$jluIBWX+RQO!m9vgf^0-td~ z$`wR*+Hbyu#OKG~0o8u!{0d>MVo26=H?20qzu4e|OTeNzS9mOlx7u3Anw6v_J}HuW zWK!_&;0^-+>*Zby zXqgoJ2jjM+Z+z+`?q?=NDizF+Bk{g|FP$(bgOpMcn~JCXrEzdk3DqCoq}roPH#}0A z0bEppe-0q-P_ZTv`_>`lTrABwSb&$)YN$F#km_!^6YDY000T}{a(m$!Xb6SnIk|k&eH3+MhOkr1>xS;SXI2WUrwG}_4x6oJ`8-j)$63m}pP=MdgLChtq+ECTX zp;69lw+V?&@pRw_2Tp7G-)4h3bl!Pl9*3^JEa2PN{uK*9a#{vGhNwv=OGq^!;kYJB zcv-JACHUw7X_IdLfnP&{lP8k+4yZ1`P8eQ@m&L_!k+5N-!+M*oyqpU?sXM$KUia80 zoPFG3%)Q^CM?WsX(4l*UNi4B_Zk&Wa&9PM+5sfTg{DU*hmNr<3S_ZzB?7_%@ zOPC))@i^;oil-KEX!S@#{+V|0fH8l)y3F0f&NBOn7~U$`tmm6D{04R=u}EAx&+X$^ zbI5T2^UG8#9fo!#@2YomYGo5GK zQUq@S|0M8J)phaMp9m@Xl~z`m*HoD4TTcCfmpw>1*ALfdWZ(vGgQ~Y4slNWKhhZ5r zAXU=~zgp|G+iN2@>w+><9<8a8@+jmiAIKFd{qE>|Y$Of3U6;3tTo zXiqWDXXj(L1B=9|<{XcBMn&o{8#i!Of1z!OxBsZ7{TZBPt=i7n92z{}>1LE!32_^R zxR1vdV06i%gDZoZJ5WAjXLdqeFe$hSxVt0qVY{B}l#ygoOZ zkmtSgbqR@mt833(PfqLA;3u6qB2Rx%N87xHhVYo8nG!RWHd*#D6Ie zoy^5+)9ShO8XZ)r3_fM+v9Cy71Lme-WZr4!`eop)M@(hz=X-4t~KnLlX|oV#wjL4ZWvhS`ThHhY4MCB{-z1dgv~p z?Dj8x&+WY<++3fo{_04+U+!N?T6XQoD{fD#^g9Wu7l>=}jpCm0XB&-JbS}uLT`MP3 z)hNofcLn4A@E6Wt?9lT+D3nkqQ?Uzkn`UlFNG$N@JEBG;_K1mmMz5#f#2V zH)wZfEAHCJ#j2HZ(T{J&20xY&nTrd4n?{Ym|zItdPSV^p_g* z@knDOA#1Ty*&$&V2h~?ljekO_w#h@W$C?>%f##gta}_f~I#4atAXUAMmgv=(0jY|G zIbvo6_@_CIQ$(j`8#r#PZ@i$Y1;_?~x z!^#Lf&Ksy2y&%=CduF-d%n2Bvx6=i$(IKwy{$w$ZUVxO#)8O{(ZJbwgiDmpl;%;dV zz7@y2hXvvdP>;nhq8KrsJC~t`5s8bDIB1Qqi%0x>R&2sQ>@3B%ux>ObYkQRw?wGED z56)U=hK@5-^`ZLSid5$u@lcSFWCon7$1&GQsE>D0O%qhRJoCcffEmDr0r*o}axrey zOf0=IDY+0oW$Jcc{S0h;4yOH&QCtkWTlFSFY?~Ne{^(R5iOa;7fGBM}2zj4x3LSifLH*Iey zA@LyHfQcLGIIY;tp`EGS8LGGc%wXg`H~zBk+>M3S|D;Tiih3}mvRv&A8aGRb^B8e% z;7dYc<5sr0{GNhzSWS0GwyWhVD`!_8L^YZsNO%GTIsa_~?n@Sm^LS$aqA8s9%B?}S z+2pYq%uRF2yz>W@d<;Y2gfmaoP7)p;;=<$8w~Z4xtv>kIU{W46VbafGQxvGL^^VZ zQdonrK-`Q9ssZhT7qD}XMdyOt>OSZlhm<9{HWCsKnv$6Bvz$w1mdyV)HHj@PSnt3N zy1X3*lRK2Ye8Awq5~r+o*J8i#>wJR1J+#3961M$5hw?4yI1yXPu@TMl>orjl?#h40G^fI>Kn$5&zrpG#< zNkGb#^wN=us<_wepqeC`%N|cw3r4SFYooEknc5wy`P#@dC$98i+XoASPw@gtL_g!_ z7-nC#D8luzM-U@b3bOR2v^vhELnv}69y^^ae^9tHvfGDDOH`%_eWMuT`2GN6*7zLY z(fbv7wB9_mFZS}lFPCEJ=}cigQ#3a>&>qg!!)N{Ag@n}B{klLAWeZd|Ur&Z6ex$}% zVch`misr1}?9m}vRA=YRsFx?ioU-;$vzZvhPBFjvXzT{%*vdD8-cY_o!O5Wfm;lz8|pTa~plTzF3 z@agxiBUAXctzUF90q?awFxQJA^F;=!#b`ZnLYd|6`qjX%%WN#lFxY zl`i-%?fNGU34xT$PGLdf7^nt8HAPU}ZSROqI0gos>h}TlKM^e$s;@H0t4sbHTTB|m z06YXd=PU6Sr)4nz!lc;x7z%DyMSNz}>PC!`A>~}}T=h`cPSjzAvdihGZ@GFKF)2Nj zzY?>fT&p;5y2V%aVi+EVz*$WcSpCsROggaeq$(Z=GRJPv49@!7(^vdRBIf!-e=e1r z2_bA-OE_XYZKfC(mSzOXNU})a5#aAyh)dsJzYs?XLy86y3I0Jgk3D%FEsn;9N+u=O z;_q!*f6V8{4{rO1vraM!)(KC@`eoW*)mTi14=(+thZ}`y6tM+%;7a<$2OQpsK`N7SF6M62`N<*6 z9ZUEb(x)@N@T1Jf%}blHfkXc+ zxa*Iqh=;=#V{*7)!rUb|iX3h^)qQug@=+CEpc-aEsuJJlN8mqeFhGx$03KmYytvyf zOldGF=fc(~P&kmq%BX!ZVDCQ13s|I2gn5BIna@z25sq&x;e>zKIt{zYmSmHlo9RZn zuZPSyjYHdE0iFzADDYIp%jh(j6g&l7$%FJyn|@k~Z?Yf-PX&K3@SpSiuorw&SN7PPM4${< z`-PMB*$d;)e3%bTReRWZ_ML1dR6XKJHEPsyY^h=fNZ>2DLK^XNe`;ai!KCCuT;?q8 zdg(OhbxHh#PVkxq>!>WUc8DM0js;-&0M7?wZ1L^y~UxPpi$L z1B9;)zrSs7I*KOi-MHXS>}JUzcs_!J$mX+d#dfzNhVCpBcma5sJn;*?Z2Mrw1XA#C z;7Urw^KuNfqI-fAyb#<`i+HSCgdDbgKnh+2uJwv|&aG}k@u@ka;Kktn0-veb=O#Y5 zh7`O6yh`8|{;M%kWm51`@Ur*hr~K+E%#1K8co}$;!23ln!2QUi;N{?&hNSOe?6DVr zVSp4j-*@mIro=t1|HXA-QvU9lTwt`3tFGjl5cW5{A23(7B=aM`IiJU}I-HKXA^+y()q_2c^r2|>lnS8|x8uJ0KRp8&9iA%&;vOyQ5 zTw+DLK1Ok<@yEIk@LCP)Vpp=Z^DDyYGV_5xu?D=&i}+#5Zrx-gnUq{uw(r_fsWlkN zr5|$h*-ApXA1a>A{R{&e5wQ~cs+Py5b>B! zX%*OU2`P93xK9{yMYEEZ7)n42-UzN0L457~wM{q@22${!;7w7)Z*5S0E+fgL;7#C> zS;WT|^$fs?&yb=zo52gJh-H+!u2rxhZJ145HEc4#1HE2 z_LU(iLdtzlZ z-s3Acq*%{W0{`)n^vC|`@VAU4lhQq>s@&d1UGpdv#>%Zv+Sy^3{#vL8W!QguNA|vj zceY?n3SPL>=B_*O1SzOMwbFo8n+#`dM0W-Q@TcGfM#Np8f6c&|eUQSnD!7{|@nd%r zaiy4)b1gMLA`GqP8C3l&NHs`x7iyRpaCN3<@y3rsvC`MrpKjG)9b-+_OU&7s^2`Sp zXvpGeY~!dpR5L%4s$+S-I2^$R15S1I-d)0+t=RVZ47$u-0iMIU!IiAD48m98pGEKi zt^uCwMm(^>%m9m@kb-N1zwsb0b8!WxqL~y4zW{FwC%&?8>j=zrK+2VEYku4@B&-G1 z@MuzPxOqkrn{Qx1s&(zBqh}}&7{*!en^C$1-H|q|v*O4)-)-h=yo108ryB8OsIWyr zEUw!FA0tldmR&GApYbIex_lvr8=a0I9p;u(m9WzLk3&JJ^3kw<1#9gzvYu)%$U{bw z`QTK4{yfKz>K7L;D@JYV!1`GhS+Dk*I~PqIKEPjtCky;?b$%$ew?K+$Z@@!JNx!P) z;9Kmtgp{I*-w4R5*x%t2u&h4Zf~wPnbyGcA`;T?QLzMa8RKqWC{a~&tV_=vUn z$!072^MoE8#y68g&yVJfII;|GIfqC7%QfN9I)~qMFfx4$YcsiTtb219d+7!qj_^VE zd4~-sE4FONLWStFNP_O6fsfEvFbnW^;2sL(<4`600TYv=IU0c5s}O%9x9m4?NVzl? zEbS4FT6qsu7j;tI@icEXrgUJysfI2eAuK|R&*A}+slsc3h%8cb?jt8dI8@LehYL@g z|A2!e;1=8nJnsc@x84zx@G&@~$kmu}E#jyBHBaDJX-K&Q9Ndphz*i?GP_=$Tszd({ zdx3#945-RX6WhDN_usGnMdo5=ZMFTvIgh7Q53^T#Q+O=WC68uHBhlG1zqqt!;PG#X zzf?28P@PFR7vt29UF8Cm_C3Hh!I{IlOt22j``rp}fbfCglm)oPd-6Ja>iWy*Js{;= zY&ujge7xPEXEzTx#vYWGFt-=XFaNEAS776mIH+ zGv?U;4=GoOi7)`SVJ^(c#pcHaes~5$3T_K-?M!@eVnbJK zZ-*4z4qVHHcx~j`RBZo)6s^o2{JSUdfyWNvGZQA|N*;Z4Vs{QT>-@nl+0Xbfg^gGp z;84Mb9FCbX1n2TFw;eXuR~I3e-m=H17(3hU)!QygP{Mv61s5mq%- zx=BLH1wovvDM;&>;q$TI2%$LLVQzaO2#Fqp_ABuh^_F4Nb-FD&%%oXn_xB=8aV^k4 z!keG4J{%D~o6}0`H|7eTMe|%O4(*iwLzhDjHtu!ikX7tb;ocPc(#abFH{g1HMBxi+ zsPHR;hT_&>Re&4O6}-BZxcl9WZFpKj%6Uybe0B(jp4Kir&!+O-U|#j4kae=%%x31} zL71&0d8)uI(#CEZB?5EXipQ9gwM7mKB2ZzKn*v*VkoUZ1X7xM{;4W=^7sDMLC&gb`V=#$a% zXN1J;3Zv%Aa9Ynh8Su*oueZjte|CLFa_>ASxdC?%2V<~+6glh3??>%KefvYz%ac?) z#aqt6gdYsR1HhHMh!6LeIUZ|*kfI?3f(HZ;kLe_%i^Cux<#N>;bA2F(Iw^S7a|z^l z4SbB-I|vT_Ldc>1wj?-YZaM4XgF)vxRJ)|v3uy+!S~ZNUM?dWAjLjMF!EXBy2&`jC z@Mz)cY8)I0G3R6CH3^})i`9HwVJUyxKbZ8|oo=TNE0+Gt?D!RqiVvB;b0u72vGOyj zEEK5(B~vO6={NRZE*S}Ns@{XF`1^CC-76(d>vrR0wznV*4mGmKVf^j{tc5VQT-gc( zzVZFS2A@V%R9QHzTLtR^*~i!L@(dqHGXgv%hrG(K48%a5Nx1|XuPCN)DCK%9KUVwW zf)6WqBpiM#Acvz@Z5e_=3EXnlgOmQZb3lCH4or;FcY%9^6C9J=zO)tp04J#2g8!p5?Et0>>lOCc+98X~ghRCjz^ zz`rurj5#<2cYPeJBLwU3Q&-!g--8d%dby3=a;U~bHME8T&6Zhw3*$l0)dWFxQrZ4W3^`!{o&cU)M=mT@FK&{NWKy_J1b^B?4U)>#7 zwMhf2Nl;B{A=R7Zx9~7y2Ba$Xw`H1F9hHAx&BK8zt_x08VEF-{xR7*Den#eVc z`MV1t@k%PLn=QqmbKiX&I5c94nJ0(*U%zKZdZi$&fi{Kh`ue&hKEgwAT&Ps=7e>TO zZf?a62qq;LV#B(Xb$$-#HTCz$>)2e@3LSm*(-x@a zK=p|asjgRh@eKdsg#o8}@XShf?pQ8VjXsmAPp6E(@b48EaH?j@#hr6VvV#hv*i)_uQCfdclz*gF{J=ywVv)-ZvxbnkiW^dOpMP{o+#kId7p)knXjD@wyKmn_MX-c8hZn*ES?^N<)tAkr>RLYx zTNaoBsfrmk6?v(ndP||IsaVYJd;dNUao;lo+<;}^(W=C=!@ump#0#XH3zJSgx^W3; z%D%OS*K$~Y)*$OHWj%YzNHQPb-@(0J5tlx=Hx1h-AqD>d9YNZZ5!kzfdWdqTHFez0*Yx_Y*4#n-()d?&!pf_!R0iGA5%Gs34bO9S7rPK@tu1$ zr(zZ#Qt)Tsj@rb>j=KmyObV_BuBk_SaDsv#)*c`QR|jv^CvHDS5<6#@6#O}Oh7oZs zZ$m|FdWIBzga-I03*z?%jlu#plTxjSeZ=IFD;{X|nou>gC)ME0-k5P>2Ba$XTcw>U zcXQUNFZHUBzzbO0I+69nk*W1ElFSFLwiftPU*h#fhj6u-l&*G%{l5qA-*$lyZRnZ_ zy2by@!vY<%0DlQyF7RtB1{}bh11Spk3OqQNd=F3Wt&hbgNV)W;bWvUp7dlW?4{N3-s2b*zYQvmWm{?;5RB{*J_6dc96ExVC(znnxEg;P*|qO*?6+nzJ3r?gbYE7J?wP8Km(f&VL8*!V02~&fxrxiR%CEZ# z3T6Q7raH1-@$oL+_L&c^E`RU8M*@M~Lp8RZRNwr5y#YJ=V8E#^{cCw5haAt%DMC>V zVO`Wf)*&aqVywe_fE$6^HxmCO z@P#C#D2OR|+Dqbh&i-74Dua|u<$LQ`BdD4|wON-`?_c~Vh2N6FfKx4Pm^T}$=1_gE zPpU>Oqj%$bFc^@k{)}G(XD6vS+mM(AR8!xR>dDQc``|-w7=T-XM;Q_KO`oy?r$|5w z*B`(QEr^$`b6kkELrA$S=8p6D2QI9j>MW?Lj@XF@C^G=J26wU|7ZUfhH{we&NYQ+3 zz+LT#XP4w+nx9Fj`E;07vtQYLAEtY3p=;zux+4p0F~P?yC=Ib?FEif1jLU4vYr8WX z8ZugiA7<`|kTXV}c8Fo}iDE2SQh`@l76~oN9$eRlc(~Ulv1dkH<_C@h{Ffl2(6S!gk>8s>-|A>D!LW+lqGq_(U@%rD^ zyWm6=NV$;T6ZdT3id*Y4u7uOdA2j_BICO!-!f0}+b?){|^k;BOs`(FpHJa>ByZMoz z#k@Ru&f)imlPBSNeuP7(cyj0vv=%S6%q?Bd4&&4;^W$tAm@9POr;@I3+&Bzkm<5`f z8+fk3XPuToH^HP_xauy!%h=}=pP*a+jeH#M74;UQa#)bA`1J7o;|AYagC`Ft<+Mg0 zy;sE{PtTnJ9Lo86PI&PWo1Cs=HG4R@BNKz~lu6n2y?Cy&e8^fS?4b~m-0|H8 zs5cK-`~D#7LsBItaNocO)mw+{o57}CT@lF>x{fuZTdBQZJZ4T|L6O9{mH*o2^ZkT* z%}i(1x)-do1nWoLJh58Oe1Lm{|7;+y?$s(7;xZ}TZ+yTj70X!f_PXcD5=^T@%0=55 zJV+QH1%7CMZuHgN)Q2nn^k7?|7Z!`}cPf@`((px)s^=6W&gRlkY`a4!a6j-+4dR2X zj?Te^Ii%p9!HWdG%(bKugA7Q~p8dfsv`N3MVpAbLiiDK15SzpNX$ky9&AP*rg?C1A z!Q@YcL2P&z0Ecyg!|RQY(Iqms;DO*DbSY5N=ei~tNhZa$2?BS}Bfh%)=O5Tk0V$V& z)3|B;Y~%(#X^Bd?y~9FBDy%1%iRg|(g|S#R!n#2a6r!v|;WaoO_& zhbB+xXAA2vSUWnAb-tDd1{}->7wC22&2Jn^nV!M+%7??c)|IR;Jeb#v?F;b1sp@7K z%tN3EsG0|os#@8~WNgNR0hiONjVE~Y*RE00xVVw9Zj2!7{oaz8IAuPNKoodnH1W8H z)k+xCL&_!KI5J{6Ttq`P^9!loYgGS%h6@Am81Rxr;^RlG#@)xHxXWU}-=q__EAc^( z&!lw!r^&b9QfGQ^yF=lcAOGr{r{6Q@U*=<*tnYD2S+9Dah~RMuQkqRcF5FlzjipV5 zLb>9><%@_vT0Ou5wFN2X;`XJLbK&9(ROO0EHT}5%F!T~I08aonDIp%Y>;gvjOo|JU z2p&{UTxGQ>2G>l=xt2fEU3iR(_o%FcQV6^z!8)~ytd}`I9FFH5eBd@u29Ikb-gBoD z+7XkIS8+aZdH1E=35gS(U)0nh2#H6H*+eMzM4%Knlx-%5uCp`m;A024mDZP#N`=7Y zMLFyJEEDIh!?Xm%T>gWsxA!F^=6@j}MVNLG7tP|Gt%YM5vc;ns2Hx5|nJf+4e=#8U z+2AGTf4}~*X&kz?VGA2!rXjl!ZOX2G-i;Kz8z4vUbnq`PiH{6Ahdm)o3Z4Njr$fA8 zlj%K-ZXm@~$^GzqO12At~N z6mxAvD}ZXOp!$1E_pdUN%mDlw_}4GwB6(#?5T*ekh3i7_)I{QPLn_Sh-#17(*IUys z4Tg&%sJ0}N>R;inOmP+<48V)Q4bq6OJ*|Ozib=ssz;!c;zxgPO=LM63mx8AYJoEf; zJZhN~ybSz(4(WHFSN*DwMsDFf|!_VPPelD>c=5>iCcW%mD(6ArpUX%H;0r4XPLsAs@63*$;y`(*kVHq8kpMabD zk&Et^iqM>x6t0!P@_IHm6@z9bMKm?=PZ`8zJlrvh&ZL~{ZJq7;*9qGg`7?NRQit`Ma6^Kiu z4voSzGNjHIzwz&hJ~$6*4JO*8xv_ zM*O^&bs5f)fRs`fUwP~{zGQ=k*HCTLB-Q0-!qKZS1MoNCD*D6^?XNzCgAO1C*9CWe zM|^(QXoO@^gwz9nW=Q;=?>KiH>jo)TvCC)csY3NFRDEnowd;WZJWH4Xr|Rmv>>gD0 zp&D&Zs#R$rS21M*15R~PqWLwfn!bZ-u{)`*%9L=!CSVwFs$JV&3X?-(|K#?&Ipze(a3iAv89=yb#_@npz@a$w#a6@pF0OHG+PsY__Qg9>i z#vtO#64`rEm5_oPgSQ0}kFiO{miR-XGiYT@3T_Ub7f0M)P45s|8KmGA;2v4T9Y%TwV{RT&a7*y)Y~uGWX~GYa zO5c_G0Pa^vJZ?}UMtn>v)LF9huUjtBQN4w$?Z}tb5yG7r+P;o5@pMxwu?`a**$-dc zBGzFBzQ5GpdDvHL#ZoG!(9S0wc;dwh3GnvkYbyD7$W(196O_mr=6NM#{G#Gr`o;5nr*PKhpKNYsos2??2pqZV8E$9+Ilw}={rF6om>U$RyGBt zzU8}HCBcAXt@#9=HuCX)Xnix^s zoesa%$Vjs2t%5Z^sjtQCjd>lFoD^_p<{t^7G4e|Vi0r(=0 zNx@ygQw07ryWAM_3Xp=kfh*XNzPV&I?sg_crG5gBaUgzs+^c&0;tx_PocLvY@z9a{ z)b!WtQ3>$s&a!YM>kR{!l*>pmA9#!M08jQHt~KorX2O}2yow*6RkS485)$jbugdR2 zQx{S1K6=8ciqn)|bv<>t`x(UcM2xo26vI|}A>Ke(Bs@aBz;i>0&n`AK!Z(eOQiXfy zwa-5II7pwu#qox2a1!YrcJGV#0cJr-Mb7yZPHoV9Su(E>Pr0zj=wg5rd|=*^O6Kdn z8DRyDIl-q;zTm!T#G}l*;{A$A$w#PGdkT}Ky9!%wy@TTqlqC%oFc(aM2;9Vu;6Ao*j4S5Fv32Av!HHiIDib z7--`^6|Euw4x94Hq3!V-=$M#WQZ2jot6nBIuHnaie?>*sN;^nM1;RYDoXqDom0?YW zIpHEz9`X@3%!xPe7MJfcsFu85wAaY!wT~7P>#*Bo)hQ|A#a7Jw*>Sy%6hQo-Mr-up zTtZ@i9|5Q4aOhCsw|LZG5Hc>Vri{y`cEMPRSF-+e-Msx+lxF!z7fVQmLQrW$f*x9-b!es#b3R_SjaQ@k@9^|G zuswble@*PI6@`UaG0ENA7V*Q;xgULdZ~@lmJ(p7Q%yHZq>S~BK0&RMbV(H$JB>)-t_9;@LfmcBU^ zYhU?uyv?)1k*atdy5!$t%l8pbHMJyF>*EJQWh9va=XJ5~e{9Jv5~^l`>R6nN%~@EIo&6HsF?AXV`?jI;YNo(t4RdG%RB;;>=uqFb(<)}Pnn${MOg=CJQWXnX zynJ{8m(u_XXI;JzP@Hy#9g2_wkI!<*;{=U4t@r~q{F1r2>$QGQcRS>t3RSN>Qq6JO zhwH`+z|+8kz7apWF7g7-4S*D`)4@GUh}%rDL#N85d}iLqS(C_sYFZho4$d608(T_X zK&t-jhmL(XZj}PnOsKY&lj@+d)o-u>2LnO(GFI0$xWtD7jokrr%u1?>G z!x13m0_}Z~C|o=-^MV^r8|X@PShQ|hc8BksDw=1MqdDXtNS^Zlk#*j2K^#vXj*-}6 zjYeZj4ECDDm|~12u|^ZS(by7WEGhQH7%Nf~kS0yBAR+=%#D=IKf(7iNA|N6P7DN!S z0Ak~PcJ8OgXWxIH`OeJl-re5b?%v%)b+hoAKI9)u3zbSs(&($YRVAX^q1V6D{w8U1 zkyf2reOjv9Pc{)t>?Pv!_kZKLQN^V?H{d5+h5vP__zu4_#;S#A_WP(|8tM`qYWx7S z+<<)Uh-m#14(R%19f$TNNp87GlH%K~=}1&6En>9=R+}m3Eu`VAMLOuCMqD$>fe^Rh zt2~8w-tDxJDL1SV!rY#?w0i7!^p816ZP$vl<}Vw0^i&QaH4jIXlVSg81xUCz|9$o2 zlRLPd+AQu#RbDU}RY5fEyvTl)r0vVyM4o({ZG4^1?|j2o-Ef7{fyPtkj_vQhVh0BA zIi{7S_t6PIXc-=SnGsKOD^cyRYl?ixeGtDOL(KZ`Ryz%lvP5Q4-CIW ze3z?t4tFg28^isAHm}OFdAmmq8aR)Lw{}a!CJ$?}`Afys%K0ex(sHEvNLNOQ^iotJ zLmB0um4AJG&wqFfxQFy*yh#1#bPTq%P!3WktBBX5OZy(%9}%_yZQwD{-fZ^f3AUu; zp_O2J>>+hF+(&xGkcK>dc9Nks4q6G$?Kpa*T5^Rdg=k|>O4ttRWyx&S#6t^f->HUi zw>Qs_3-329&>}9beCD2p20JwPSVI?2cHXL?`JG4Wr~4Pvw+z)(b58U%CPdBdsb$59 z`V?iwrX%Lj0uQK_U6Ryl>dwu6>I5h=Iuo-Bd;EV?Q%Mhz9xz7XyWJb+6oAaw6^FH{fN$>4bnKo<8y1uHWxk|+(LHqsV=j`zOWh@3_h;gY)bX2FSN+0O!K1bEgkAPbOp#-G5}_^9{mHK1bHjfBlgY>Q;%{<^d zfL|uzK&#urw+2Xv5m9}9;1^3+wGh|5pBoDSW`V~9Ui*;yupQp#wu$%f7S?o>Du!0K zA$P6D$bl#~jqLrGyD@)ep8hGn3^9hYCQ4W_=?(Qbyn-yzyCh35eo1*;>xG-O%5@8D@wbM0jq9tAxc)l6P;H%FNlC6oOG!4h|B)M* zDi7QqekMlvwTru~EG?9k1LOcd9xvQEF?l@)2&cY;SJ3s33Nn+aKEg*(HSrwQ-mkTspX#aQ7k@Vsln$1fPam3I!X z!d>C9*M+Zft#y%W9xL1pzA8(&NAhPA*olUf3vD$#?zZs7J{B2F#$wf~^gOxUGCAbs zema_3w!Q^n-ElvYBkmm=)#%02FF|N24|u{|;h~)-GWV#g64pGRTe@#llk}cQ^9||H z3+YVWD+jn2e083Li1_8J8T=*!nQ?6Dupd|62IL zLg6>go?Fgh0#>btTU&p=L_a6*eF#`&1a!OQ!)k^K%Yy7W_@T#= zXx-ZH=ya4-i#oPLg3$?@QQxugPm|V7DttW{`D)RUy28p$b&X#5(1Gmh$rAiTvRKr} zQA?QQf^UGYDHT4pdE4fEZxJheBYcCwhs8}}*sH8?U-xcA_?PJx&KmPVPU8iyosdNmdtVFa*Whp+ z%Cwn)4h|Bq`O}=%dt8btZGKpFs{weQ@)vKnX`6Y>S25sQ;bjJIIL`YlhZZZ@0^v78MISn^ zqyx`@Sha#ptaW3CR)AQ(Wkb{;yf5z(Z`&Ow-sQ|E20R#kbC2)`sc-zo=g+Xx4BOx- zF~VC`T)BcRu2{8fF6ZVBBSZ*N*CQew5No@DZ;0SPfkWXzr-WNSpHPRp9agP$18l47 z1CX4j9({=#hWCMF@%FX~<;JCAz{BC`25;Irj?t~M!necEr-{Bw4a?E|Lk2560)8`H z_?4gLJmkGutneN1D_4c@39_dvP*w);JK-regrB@`k;gauu*&t}x8e0QGu3;k`U&$c zw3i=?wrFAtHj5|^t%jZJtkdrZdEfQj$Z&Kw-T}Tv>Xhzr#qtKbc8DR~C;xdhYFX5O z%sDM!YO?_qHPk=;GkuPC@Uo8QtL5;O6q4-omn2OJlDe^&O)7CWdxeaW-TI|e@tqa} zwIsE}bM9;CL`q6E4TU`@)Mp{)MRqY(=gcehM8}#LS|MiG|75A5bUV8+4Owm(s!twH zJyERo^+!_C!a%8L>u?HVJsgwa-G{ zKO`&%Jqn%>A-uzxH>M@AG56t}5-HwSZF?{+p<-y#HK&Fe zPnYJJNp@`hc}*2R+e$rf>?h#H7zxMhM8ZL?t#S{?&JT9z?zg+!T2O*m+{2HH`@+Xj42e___#t@m z3E^Xd(xFx(}Y_BR(`mC4DNSF_$r^~Oin86|Gt#y zm-YHfiKXp7`BxHd@AIk$2#voMC&)Z@`>dDk)QUCHw{9y9l?*IiM~M>1e9g!lTc?Q+ zGi&6hvWf81c~YW^eXNeKl8aSKG^+a@&G-=Sv*)_;^0_j;p zdUDXsZQRjupsza#53?;+ecd~Yp7_#JVwDi)Uk9FDZFg6TI_}gzJp`F&>6?CSjhY_q z^{R>XZkS=MHX5HINvxwJx!St%CjP5UDlMXGw?FG^sK4FA549vi_O^VWsa`G}Xsig9 zo6qe0_E*Nxz&tjINAt&ur#X#%xv<+Xn&330D|3?4{S@xW%&;n>mgIx8#m1Fy2E0^d zfWA1^^^rrm=J@=l2UmHhIzx^}-jXA;;oC9nt|ya7%?7;mVVzd`cyHq4?^lb=+{U|O z_4mekXL|k}Gw&BVz_TRD^pPaqA5Hv*=RQ(t<=N`BMsSqEkOMn{vRl5CSCSIQdGcdJyAq}+Pq zt);W|6aMRee7)3T<9YmD_K5$B>lg1bI3S8vpBI(CFsf)Ct9c)OXN-~VOnr53_WQ&7 z4bAad^$(LY)Tlv6{V>%}zg(Yd?*b)B+9xHM@rhGg=36L_)(*`sG*I7=y@=E+TBIw+ z4a>E(P!1yXZ}+M=S1%2SrG1i-9*h%d#;OiTm4mcTLD1`6MMDFBy`zFhID6_dY|(z2OJ2I3E%rrvbAo$ zrV-mPv1(0FGNa8ZLR>?d`dFmnrtV`|OF6)=!;^}I&pTxEAM*oP37rLxE)o9myPt5& zP*yGU^1jpYOE|!9z+FluM59f=I`CM5mC!fg8=ndf{H-Iq{FGH| zqrRV7Zet*R3u)mqk)}L7P{bA?9OM9%dr%#6;+P|+$ZfQ1Uy63=@OKt5bAg8zHmdbV zV@}6B8f{n2dd3uM4&Kg=CFjh+%Bu6g6lmKMsYg$S!zzmJBdbO=wJ13|M^#RhWAtD_&D`pL+HV*KI@cp5}`~5g6 zj;jnSE$|3_Bux0FdHErXo3U!4do1>Bq@l5gpXCwtG2Sb~#k=9i$q}qG5d&VNN)aJ^ zgxha#F-w4zmMMl`ixl4TyD{yUZpA90&8=|_x?a|AOc95ZI%@@3m znN(ID@Tc&@2LE})3ua4{l~#NPKX+90A0}m#@@;&qT8Uj(}>!Ss0c)Y=Edde|~jiy%zDCdg~ zN6!fN8F2q^W+$-1%ivjOg}VpO?8)5;E8HrNxszn!57u{S%XB_gZrsb^*Dndb)arYt zXq8o(ve4Wn=;bvvK#FHBYXwG)JVRJ(+}%>d-MROs4>@ZH!ojqGpUx0oH?)*NnX*a< z^I$$XnSPiMwn)!k73p_%?{P4d1KbY&!r%)peiX&tOROBA74VR2qTjh^Jkwdqs)cSg zaJ_L8Fq_yWaKbU7uEaY$OT678dVI!Rju;f!9-eta_^di_t!9!8t3)+JSXY|m%7D`W zX>6`YJE#3!%vZ2+&yY_2hIGrO+%KFbzK!}__s-fhru)7S_t$>~P6s#P3GQhHyK zG|p&Ec~mO+D)`<~;h$gceT6T@VCBSff~PEhqHZ}8OK#G~E2~zhMxR6*55nd#=zX+@ zzox1^iWga!yC>icBjApohEo6)7VZK+Vl9bm(tSy!tTdo2{Em(A{WXUFY-ypaTHQJa zj|!my-H;x16scvzdvh5n;UG;@?osIK;ZJL8C2Q@or-dN%WwUR4Ry2lbW|e$SESbY; zvYI3toh8YH4u8=4IU!>ab0N__T=I~2rsz*I^mO=S}_b!RxLzAZkGjw@J9O5 zPoz&P-(ml$a)7Ua2L=jXbxQTU$_if#&khz|)WBmlkLFn6KJaVXgddqW?+YddvBKBE zi$aB$^xhfC=Zmny*Tc_j7v4MI-OjwKiWR;Az9B+*`{btFW0jS*-Utu9F1+qv+0%GB z!m3rN@ttkPOtQItTz0T)2@T?l_x&5=3KwoaLL4Zpstsn33Oc zlTr>^q6U69x@u^P!-SQB%y*1aCv==kjr<6Br9cA4)o`lJWe(bq$|ChdW$I2?9lV3j)B@8@l+_%i0<7m?VCNWKvKY#xb5^W)1N|^*K?OJOH zuQw8wMhSqsuPjy9^UX%PS*2H2ty#_G!gs=#pB3Ki zm!3Q}Dl2>!Jk8+8zMs*M$1$ul@osoRn&?+pwB=M+R;|wNKk}1U-mO6Dnjz8}0b9HC z@Qp*Y4pk!I*;j?nKK|P%_6lSD-yGrfgmE&`;BP9{Qj#MZKsJi}Z+#NLP5qU*fxZIKU6V6Fh`x zewEC#u(HDA;1@iFpUzt}g-I=}@ObzwAK}wOmsI2l3oFlzhvAzx3$N^a>Q}y`g;k1T zp3r9#D;RS>=BQ%y%L~TiL-G%=Mvjx8Y#Jku=4}6lPlGdYV z7G1YWuBGiTV4b=Wjv~zo5oyedDZ5#1$AJ^)82os+@GScoAMmC(RxO0XqyPP=#{7iQ z(YkkSiJE|S)OPWH*l!b0+A0S9KqCCyKH>kos8^jA1+hw0v-01^f9oq|RfjPLqpa|=@ZjUZ z?~eWAGoFF4a&nx5M_dv<anQgIZ!RIwJbo+Gk zCmQ-`#*SySOcH5BFH72`zt2nM2k#`;q&H6AapaNgJktEDBE2#4Al?H`N>?L?qq3~8;f5~;PtXc^In&#;pn9KK`DrySewhzVo z*7WHYSkNK{JQW^e@DH|m?PNP3R(Klxfx*9tv!;JmR@&jR;zbf?K=VZw%*$ZaD$?=# zkUyB~Pe;1#xkwl9sK^*eIf&G}8m2jAj@Rl?C!}+K4eej?jpJV`tm4e-X9|#eB zo2B2iVH-DAE%fzii}kUhMaMO+>X_Zc{mx!-k973*;G0GS5qI)9SzMJG2NK6 zFjYS-n$uFt>ycOK3(c|d;j?|@$d>!AL;p`N>8GI2h^Q4>FpEBW?rOma{lnP1>JPQ8wCn}F93NWg_(uIbBj4PiC! zyLWO^xDa!YzC0z;WocJ;G5dgnmixN(&qig;&3>O)2S#fFU;ficZVGN zE=mqJ>t>ZKEmS5=+M?El8PcxhHj(sRGIJpAxwuDP6ZiXVeHj<2AfhezCAeBG3jfkV z?kSqlf)np9?snJ3y>8s9~dBE30r zx%b?MFMni|p!Q^*w3St2l$+Q;8vVkN7=>urzOFj6hN&JKC>0*?2k?DG!UwHw_Y>2c zSgFNBc-V8{&+4@E<#NL+v14w$Uf4R{v57HeGS95XBjb%(dJ}aYnX8_)9ue`8?Q>Ov zAZJ@f$|^30?J?ZNQFyny9`#|DX^9#y zxORauJtg3YH4^aStsm#}5evd<(klI)O=7C)nJT`oNY@T5{+Hz>9HddNAFJ}J32L3# zSyOYbbH9t;eQcfmV=YaU)vKoZJI-^GJoJ|&>zn5~YN z_PS~J6`wS~L5sRz^;*3x9`@d(7Rq1Zy>XX#HyRMhNvdLKiR%9QNum~TmZd{m^}YHs zl{{M9UwoeaoCO7fXxb-#`c%^*{xhxKYH6}$kJne^?5AI6YM!6Z*gQ!?gKE@s*U3 zt!_*)o0r_0Hk+Oh)duf)!~2qZ88>+qg9B#^&pjhi*WUU$iP>wc64g9#wkZSE|CsHN zhFlV9^Ew&dag1>gsW|}KnI1A!E7O-#le$uX6?i8Z-q$C#VVYdUU|hcvo|7(7@9vCZ zR$f`P0<7>aG?r}4GDZJd_irsxPmj0-n&Z2>@~kw~y05=izc{rgt#hWN9g>_hlg9~? z%OOrX{Q3|tX>{9oi@n^W?2p3)c&_&eMb|M0TB8ax*eMN2hu{uzBQMM}ceA8B<* zyf5X5_lB6qR9eN*%KrGnD&Npyb9?hFsV zC;ZR%-b!RsDpsjjxjVt#yv4>-wArBZ4t!`l@%jDos#7>Nz49HcN<(cb{z-BdlEfKF zJ_>f;#=IJ-;I1n9BS}7`t=s0Fh;$2Tk5R`DdS-Ac*pIN_rKe6fY>n)F`7Cs*nHy^uOPiga}5 zfz5nm8V60E9Wg z=WCGqxk>Jl#_yF_S||spWw~#upSn9BR#>_2?b4zR*GRP%|5SJJ|Ing!3+BOzqNS>L zW^fczAEc{2McO6(DAiOBnzShWOFLR*9nzHbBE6fNzmkOk95m^UN&oxGg;}SAch?)^ zVH33&w*M(-$9e*~Z;*hytEF*MQDNa5;Kjbee}3G5AV&!+d?Vb^U%2aAKU=ZHi52b( zx8Ewfv&}+AY|2XAHo*@E37J>Yd5aY~muUCUt+*SIzcs zLwe|zNb41KeZjm24)73o>}}z;k6JM`sjTo&c$vXxR4ApxQ&xBw{OBFgf3)*ghAGNQ zQNrQJ@`Q(vil^gLR;_MntM1wmVmnfoe34c?Ka|IBg3S8m_xi9>9!XlojUyN8cPf1AX0Ph!{b9$S88<&tN)`~@7ja+lb7P%&-%h4w)7H1 zOZ4uBUi~>6B9UgSc&YmL7}t)@Z0W#3lRinft`B>5xvXucsV>b3{g~W)3HZWM0HNI6{EG?8(3vs={Otlx|DAM>uk>*C;In4`rI1u6(JnEG2OpjY^g-})r zQEnY@-nF}gNI>d#PNda)bY|429N>xYTNj0QPu$y#4`yP8ABU%<3XdsC8_5J5R`?0{ zjWpr^d|R7NL|Ne{;r8i9{3b1VqEJ@&DR@k_aNqeI3W<*uepZZ<3wOCEyhb~>q1@T9!q34o?+Xu{7|2Pctnehb-6P>!6C5e0veIPd z;fI%(sY|+hoeuZeQHE7(^=bJH2XX~oKpO2JQa76h`)L9k5?<^)D~#n!tdcYB z*6T-u;a_^Mpem_ogExuxhhYnzaNXe{Re3V>RcHLnf0{bu(~yR55$OllM{>F<2l!>U z^H$+kCVeoBsd23Eboj17;X_s*j%U9#R`?aTXRvU)p9e9(S5|lid_$;k$6mcS3d#z< z3O^Ah{Oa{ytTietBg0I1^lsq;&&}nmQ&y>FxshQ+&Uj;Ed%0hMe;k;oJ_d3P|E&ka zzi9q5Zt^M${5pJ9jPM5S{nFWKffb$we`xTThYpRWxv|2t;hu*?|NZF$yt1XN@Eb~h zSh&YeOPGXHR+{`KeDiVPRi~)KtgO=H-rv4z@>&J0)dKY`q!A}X8q?pKC&+COq?>!djz?V(wl$3*(?P=$TzcduQyNVIe96#=Oba0@idV6LAV+{BF z^;VM86*iPn@&}}~DU!6=X`Q%htK{&9@PcCDS85)!8($pY04l45FgL%yS!Ivv51y*xdx+E}JM|v-LLA`F;CY_H8}Dv; z#nM7q;m_d(>xIAVH0J=jRItKdz`ZsKe{t|v9<7v>?(-%5z$W1qe!ntkQda3#lAK<5 zpB_V(svR(8Xmbtin<H z$2)4Pc-yDh(Q~L6G?F#EBv5$o{x8XLz zybu&}J97YUc@KkB8ZP?EGm? zb)vfA?Ri?fcYc%3phU%}HoVGexP6N7$u~1?m@mTmznwo;|NGi2JAVfMIL<+<#<#XV z>5X&fuesk>i?2|{ouIzACFm#d52|yS5n6K(8+EmhhWd}2W-LpaFR&%vm~BifnHB0Y z$stP|&BYD-teqa;Q^^NPVgNt ztWpf~zZH`j{J;MM%`c1|$0@c3Z-?jN{h^J^5K9XcL%hw}&w1&&j3ueHNH^FlS6%SU zHk(E>)r5l-w%n3glRggmBaQFz>-rjW@{u>D@R;dCL=RVq*kJI0PncaNu9ke+`*mt+ zjoPM1s-K2>ZfP->wpd5N6n6=@z1tY>lPatxebj1_K0Q4=ds8b~csm4~B~O!T}?G zVZ=cU=Ar!I-Uo$`a{oD)sR^uF)cQ|-^^FZZGDD1MQuCDf@wb5;YK?Ou^*i|}hfnI@ zKna52zDdH5%-hd1fU-)u!&a~FrJsHiW87-YHrdoB(n7s+8I1p$OXA<7LDmv>HxorG z!ij&E_zN-@ZFR8np*pw?Tw4uY`AZlRM01AXKg=on_=TNN)nPPC295f zA5-{d0_D+i6y)A-tD^=-^=X_X-^Tu`sb)^wtdBRlHyU-H%Q}R#2d+rk$rudGLYP1NDHq@?*7{r ztYq6P4kBH#=+%k3*){4-Ez#cnZ_n4z_k-R#OBWqZz}uM;@Miup*6>tVIU7!&dA$&S zV8XX*yu2N4(RI;Q%8sLpRvz#O_{AH-%U-@SoPVxhW%zVN?VFPg}1 zRID`b9(d+M;mx1?HHxjzShbXgGCzL~a;2pV2 zyzdXWSDTkJh`}>RG<=)8@SAhucq~;`twv`a{1>F5@UE*aXy{2{u71JSp4e(FIbz6R z>m@k~;vP{+l}WtK-aoYKRb!W=c~v<6HStp|M?hSs34+Y}jq90yhSoVq4lf_c;Zpi1 zH!qb*lfIE@qhCAAKN)hH3ndnBt99ai^+1dRk21uNlX;i->u&SV*Hia#$PS@h>nqwG z4lBnp4T6Vcx<2RCRoX5rHl|uxg(`7qHw1|`qU~Qb=)~~Q>hy8L|LwpwYkuHx&+U@E z*zI-pr7bfPwEE2Y$W?zn_`|QcF&SVs(7z=cKhzxaSGwx6$97gnjBowLt*id37T&$P z82>*g$KFhD|3r#bjy?Wkj`4;2ayQgpCbv}+B=Iyrw$T6`mkwiDLp6ie0J|dA&g2X| zjI`L0c8$8?&NB@Tgg64fyG`1#!S#MDyeq3#p(bA2HxuG0Qo9h5E~>wp+qZHc#4&hi znDEMV{!ZqX!dNAQdB_%cxnAH*NI?1`T%=F)+TCJrHx5$aa+6#;{|r?Rw25dVwu^R4 z@4UObQiKO9%*Ww2JB5EgA&il+vPwGhC9LA2*y|Fu+`_;|3qo&;EMv;6L(rn$wP#vg zSJulnhEC=o{;5}|7gX~Ec^?{iGdB0=%mf(OHSal&MH%$oCy^eElp?M#?lYf{2jHMd zD`t5elp>b<(ch|iY;tB>%qdm%81Z+sc*FyxiX#5zS)6hDmuT@%DyjUcK98J(^jl}8 z@zs}WnLl~{Ku5mS#~9lc&06QCZp|E%f8U{g)^mm&JB~<>nW^8h9YJN%3Z2OOhOq(dXI1Ln=8^<#x@bt*T~RBIW^ob8Q7q~Dz?=13_ADv}P*eIopEZWY%1l~qER z9a>0p54|ESJZ#lVZddSrW^JQJF_SVZxPz$};%)wevf)@~Rfi0u2c1PaXWTHJ@stDn zD*S?naNE2G`8?xcC3GgdY@P7^HD1hNc^j+N!s{E3R*PHLR4F!ybn3ZjEN>_W_;vUT zgMV6(@5oXwR(KZtk*|?5L+xNxR(Ll2wx93=o33^xC02@Z18x%{-0I@Dw4Jg_QJ#-~ z)g3k49X*p_-A$D;Qlys;{$7n~d>ph=k5Bl-7+0F-MPkVN`gW}+{@q#-@D>5j?2~}w z0{X7Dv`}Fsp!sc|TD4c|-}E1%dELla}ACwK}EU16)P<%)d=!j)BP`VQTCUe^xvi)*{zCh9Z1gB`?s z@!7gxGQ&y?_;YylD&cEhUgs%TSvk-z;JaOgFPX7`S}LoAHg8W4Ef>9q^d-_#FOfz~ z8_NTSa?ncg^9SGfkgW{qUT=}U?R#bt^By=bNUw+Zr3uYc8!0~@qO2SxkvVc%uUc;lhftjD6?rcpCnq|vb=Eu3)kPj*e<0JnqN z9TJ|n*Paogvcgxu9gYakt^X@mfwIC^!plwxUwLl`58=uRw}&U46+XRj630ndX*mb@ z;VZ(c)pu#bi;-BRh~|>#z-J%z(rb7-akyHObi_R~L)_~IE#$ONL8$pEctWA@#OCgE zd7S~PR`b*2a(hDU7BgA@=vkqj^j+g zwMM}InoQYhDPiF*@N>43XlMIHYKt3In!pvl-ck6f>J^!HQC6vMx#4Wiw>HK`G4sFG z``<3z&UNLc++D>zc&0@Gp9LU@R^L6~X$){%1Ah>|~)j1}`EO1WUw(yJwhMS8?Iq@Mi`;Xm86ry0TK* zHSqh}M4vp^$&b&;W0evdPI&zY+a_A_lE$Nuw@Bl)`v2RPfvL?r`M?hC>ve&5iZGX<*_ zqS^7^Ly>Mpnx8Dv9S4_`@aYvCL>k-aRbT&QX8##T1Chq0inR5#%rE#F3l1VR&%dl; zwrZL^2&wNCkq&)p@_J??aexQI3k?3onE9MH$_n2GkIWSP0{4FVSSrU_ZD)llAsGA~ zh+*`BGPSCKSLL56uEs;v(FhBQE-|s44(2>s^Yt-F++T1 z)ymzdRZvBw;Ycr)iFDhEk~i2dhJ#4Wb7y-0d1|-*cGW;uE7bjB+2ZqT_E8Rmh=3ok z7T!1J{7Dv>uxgd~{rg_(BHw}Zf+5|op$g}@a^Oy|6JBI1AqIKo?qGQtt5)D+AJ|`z z<|_ARp>8Sfbma2cg}aZvxX=0}(TBI$2%@>S?bD~PRw&<25!PHjyYWtQ67L#iYq)$= z3{C3)k>egM-~gK+vNYA$p?>=1v#sB^5tMKbIj(z1jt%?Ihq0ZGOj^Z9+!z8JF#-%PYjuqMK7`R4 z?b*oBjmH@Cf@wQs&@Y@*2k{OKmh{60J6~kpo*0^U+X)+|$vJg1?Db+x)=wd_V>~&I@0A?hzSC0K1VAQD+Njx}YDf(^DKT5!W zcnKIfaY9Xg9!FR$VD!H6{u&B=6tsnsAHzHUn0UW9{ue_r6+@HG2=1=_){}rV>6A!w zTwF<{95m^$nTynRyF{dW&WY4@--lh8xWYlCW{noN**Ke#*m0zrFN)OT<4Zevkj6ny z!*V+vLKifzTg~;&Dkl&}ri<8O;GAT(M&hEyO?f$_qWJF%etjM;+P_O54*hd0P45+b zo*&K-&*OH@UY(XFCwJBd8WVdp)O++r_C54lO8U^>lBHzkW|xVNYjn}t>)hCq=7P)> z)Bf2L2MSvI`h)&w9{#9Lxcz>zs~Q`eq(Kf{lLoo6JC*fs)hyy|c49j_9#MP!Pa#du z7OBmNJ$LCqaFFUgOnE)uo&3fMHFtFy?WJ7N#;&;Ah}Z@`Nv`ec9TNcTS!>B#9f`f-E70iFau@kIEx9W5I28Ua@L zdAM(>@btWoZ*il=3cmn<`c!!0tRaDXG#o4ZB0Th&5r4>n?|G2J3QvanzZCv$!WtDH zE0@nDxRv!vbt88ViRN~qtWtFIRLv@iGuE<9H2lo_jft9q_q7$`9TENkH(M2h21$j7 z*bD#n;yFjwk+4csvojk0_Ad3#QyS9ahO|%J5f;3wf&&G+3{P7nA(l4P)W_s*&yhB~Zd&Z>3Eg6RpLymUf%h#91X^R-W&uu$yj`}Cf72GeZ5%=P> z?pJxehag({YxZcaUweVy{_jm4v!Uz@W7Y3iGYGhPy#!oa`^RwhkrP%6c>iXnA2rnD z_M`!{(N(+;8s0(9Gw3u`40tAd(*}v!d`LAW$d#4aUxR0F68_t)4$RdmtI;W}etmBn z+jv<8tv&OWe&nN89IoSkAyoXASFg%!fQlkob3Sxy!gSxmh%!B_z{ulXNp zFAUIFyybE*;2f6-;MlaP4nhdF^i(C43na~HDcFOOAA#XF6V6c@hIWF zi#&NMRaS}Nx$gDMQfh~o9vsaZXfMZ#w&o8F53<=453N)y{8t(^G!I?JmR`o_$E@`9 zvpX7cdfz0VZM+05`=Rnr{QZ%z642%KzUCWOQ}a3Sw~($sE7Ioe?!L#q3mmlEP3l-J z(pu!>VGY%r6u0rVIWOLGp0#|!fh30Jo%xG*TckNi4;s>TQx5YitsFFIkHVX3m-ro| zmkeo*Rev+hr5x1H0CF*$ydvp>EVEhaP-ZPg>zc##r~k88CWT1T-+B4^>>6~ujnQYD zM>(wEKrIPo4(>*;cI>LfPk%V`k|5Ku@90HpBzu?Agl}${qu(TIiQcPY+TXKkuRSeJuQ|{SVF*yUJ`I&OuGy|+)7w2ckZo}6fH;D?(AL~ zdgITQCDi)~0S|jiz|h}Ea7C-IoD-$+nDxS6uAkD3;VoAEp#C@FyEy;+R zJjNTE4pjp&TfCEZig$;7m+1Ia47eTqp}}XS^rNRyR`?2d#BR}7*uQEX8xgQlk(KZV z`-S_gp7<^k&RDflxG(Lb7VGShdPa-1!rkCb$0g4AuX?Xwh72owHGK6M;d?XYC$fnHE8HDka8`J;CA}C$ zDJ$GV#ZMCc*9&Kktg^yA;U|-YzyHan6{$T|xEI_$Rruz1i?ey#A1mjVH+)5!@QP{A z7`-X0G=cl#SFJT-;h&YYRvEo`p<1b2gZG{+@m||vYA$Pm#DK4byWA8$YMgZ>V@0fR zAGl4f@NWNpNhhYP9Ef%BjYYy|)$?XMgtAIXbKU*rLp!x@ydG)PGm*|cvFQxYE;wkV z`)|-9_4?cfq_?dc)SaO6_B#XkSqBdAjqorV;WfigQwn8;`@)M1e&T>b6sH4LQf`7f zJBYqReESef3uV<()_rhKJwf>)wQ~~bqT?SP;=;lKz8QXbwQ&F2-!XzzR=7Vr(o^`| zR*h{~y2T3L0)Ofyd~L}3Og=S%6&?UTxxwHqbC}vxR*JY4erc=lKgv>^;8>-I=0ok0 z8b4IyYqfz${li82PsN_mj52U|_0CGYAa(e}6XZ4uAf?6>Du5rX%Nc=0YOYq{3a zLdB3B_SrZ9G5YIIl6|K#1+|!X)95{lYmzl~qERH}6IhHmkL&2&9KHM0(=# zuZOuC;2=`-rar={Xg1k)AU$qKLw=8l;LO4Sz7xJPQ$o}zSe9dHp{(#-@M~GZ1FK!( zkx*ITyWzPvh0l30mVLg;N>TQ}kK7af)qK}JjK{HR6+h79UUj6ANH-UY^j=(2fu)6V z(4<3>>QyD%UZin`^w;9ioaD-Z5K-{xQVC)C?x2B|7Ro9i%n7r9V&6JOh zw|5erGuQVqtI=4s+Wa)-%jtwTh&0uZPXA{)M^-t&W8qFN65?@Ox*zM|SP6XyZtErd z{n8rmvl9xd5xU!}9y81%M$H$;A&uH3(q7fOa;Yf?trW50c@`S#yy1h>+!^DQcZhgL zdspG$sTi8{r^VGe2{O;Z!wWX(HTC%7$S!Jhn1JU)CE%i;?=0kH9l}zhBk<)B!oO|M zY9*Z$RxQz?_Dg&TaTICH9+6r&M!myK4G!>QaF0mg=X1`nxT>tYk&ysjbyE20=+z7; zlvOKm&+zeYY1ziys%Si5nAMs&@5dLKDtDZPu@~RGuEOhm{~HaTNZOq9lJ-~E#s9K) zOL8sk>~1fO6&-W@oICWkdV)BP_qi+L{mblN?rJIq?Q{aZ{F?B~;U0T<#~-T}wQrX( zYS4NTY0y29o|#j32%EWZ(2AdwTv-iHPa!>ZU!+&omvLuS4)D`(?+3zv%)awGbA?#p zXW;7$K6vQ}cD^Vp{4D(HL(w1Iaf6;qS!s)N@LR>gCk<@G_*q%CQZJeE(AW!Vw&XaA z=Wh`;3GZUVdrG7B99R_teje^#B2l~7_~uJCHe#jX7vSMmtJH;h`kiGj`IZ7!E!%*! zNHqw(h_uv@F8$-n1so(C;K}f~9RF_mnLhbp@o!)Cws$&d zv$sgv$xXju9!4b>Z}XxYInzOXZSe}ytN@WZ9lXGEmvYb&wW)QhiH3ftAEq{JWZ=DL zt9UQ1Xvt-zV!*G$R|g3%`k=5m=K)rDCVcHS;kRz}w%{(0l~P=TmxT#$J9B(zJ`0Ui zD{zg_dh4}PeDubezp3tZybtXZ?{2j!Gmuv?G^u;?yc$TekiIme%VV~E!Dtl+O?tj_ zi=mV?8)@(^iF)p*OUIZw#DR&98}KW;h0khq@&;QJvC2TFF!J@(uzS$AY6|Hl+I4#k zZPPh@8S&zwrL*~B{x77vg>?zyFvS+JG z4${CFk;c?&#V&v4K!`i=Lx+X?X8SJXa~4=7gn2p)FZ(8y5V=UN9T92oS%X+!P!5E+ z3-?bHUO%TckIBj^A)defsFcl_J*^0lhcx`SNLRcO`8GSZaDeB-cN)B2kjG?pmS83H zJ$S(d(I?uU+QO%^uxh1S@?A|ev@SrJe^I1khDF7(IDrHFK0Gm5_y>#XGj*k`@Iv^l zG~soUn=|BAR(gpC@C{kQD_vazaien^gMwSk$Eke3)rIYHroAgL!xS|}isL8jQe1o(YX~|lVI_~^{v59if zq<>DBc$PYpAa(N*Y1r*Jp0<<&m+KSw-F3qEZS24>Sy?57Ia+j?mpDg|IYoCNtoFx5 zEmdU=5byuox^N<>7!>R&JUvKw^MSvIFm;DjLYSxN8;=I5N9AWoPXvo}V97c*Tq_60 zUC-eMw+Z+C@IW42Ggd8x#r&U)nKrY%FVCNOQB)?H7iQm!L@x-KW&~X0@vbA+17YDW z;n#LcqH&WpPhmhD=rE_>_+v3%!HKaytv7|F^*@35De#ePv zRmkuqUEJ%xIiCBf3Zj+2eyP_`&AWeimWx*YEnoT>!!UDVY37JM>XZ7*$+7mT$i_ywT zN;~-39O3xTT+3?f*G?~MRvy!x{o=Mt_lG~hnD!G=n`?*T`Jm>8} zr>1MFsIN9>&=mFrOfv%BI5YJprm_hOcYr^9DTzLK5y)N+WraJ!pBel?qvmbts<6UW z!NaVa)rEa$dXt~|`5aa*K_~cC8{t7KBDvs|RcnFo_K$2N$b5lk;NS}ucst|0-ATN& zeb)1^u3~5v30xMoNJDn9(d{Uc3*Kj4#Cx*qWFDhb47e-&sH^b8KYO)eEP<87?*@-^ z7w*;J7LBW{659NJ&EtPM-a@(>sg;LF_Xm%zWND!sM7s9%%2-*p?b{qOcckllMEb*> z#Y=dh1P76t|CzFi{imT;hhh6XjN7N#saWUlQd12c1aw*_0f!v*bKwJAgcWa7nmXK5 zeR#za=>uPp&aFB76TY#91KbO~f3xrjRp!MqZH1N4-tYo{;rHx5DCBhktXjb;+?d*k z5NnXe2Z+@2#_*~&yt?(PCg)iD;VV;w7oW9urK7~E)#iGApXG!ILV6@s zq#d4nvCgU-2oVh5cU^e57N50Y`Vp&Eo5LGDcM@V7(mX>N*rp_&y95sK5V(JiggBV- zCR0qx3J-<*<_hajTOEfzAs<6 z{kH#>^Fw*8@Cf*>0^zQaRbKFNKUVk-c;O9BI5zkeQFr70@~L>+|5rloRSX(-58TDhMfIR( z+D3X&I;;{RxZkS~Klpk(5h4=lVM7{qYaZiB;g)0wMMz4e}6avHcGnS)9NDegMA0OL%pC&YOj&dbj?Xbu6q}n;yGWwJsrI zkp=~dw97r8JFGb2K!`)|7ZJiQbSfUj>tR^65UE9b)sGwFkY0)wX{8o}D7A9Xq^*CA zT0*vXq^Dya)g2kUCrt>B4bU+VSyH z95m?*o8D{4b`)vaC6QY1a7t!@69+;ZgCD;k{NG7S>(M+|C4@OdIQ7-^dxS_pdg6{q z{hI#6q>gfcC&C?bg*UvtwJ959vBHnTujC2u-Nu8_yRyPh!0qn||KRIYOmHbH{3Luw zq44P)?{o4gEBqAPx7~*aF`hjlUl1get=q%FhFGT9~)%$0;t>XYc2S0A*sxGV! zU*G?Zdo@- z{=o-5x$3Y=5wA~p)hFy}ve+1-9)JCM{<*N$>d`J0Z@)A~7=2 zrWxALMn+fX*AIBWufcbml^A2w91gHPij`_!hsRzJUUa`IWmi_Mn(v=!J{M^gQrC2m zcDVWATOJf}(4<`+&isLF*+{c8L|QVqjyq=!4jif*@V(i>3pNbnF0ZT-!aS#AuG$+j z(+egFH3@&;B1vS*BA~_#L?WW8qEy&e_f0LagvyxJ!}nBP+95o>o@)U3f;Z@EYB=bIm9# zJP-b`MEEx692R<&6`l_-Div+KfK&cUGDq;OP<80R;=&>c)r0~cTv0J zlofs-9&97}2S3+gDoI&stwQ*H2jTNRdzaCOvTAMJrsdxqvQM^a_ z4}6QaJc$8+sG_bCUVGdMf6MT zdeZYKE4&!K+fBILoyOm@MHef)1fH~7_`$g&sJ*hnpTLiL3cuX;Aailb3NM9Qc?)l6 z*|Q?63s|{Qp28FTg};+LfE$srYOT_26m-X?>uiy2xd8>}T^jeE2sV{xJ$0^&j*Ha=_;#)HvdCfbG7eRTDJE-4sXlck`vzh z3dOrx)-?xaQHY^Q|5*N|@gbvf-hNsRNT*oEa=6$DnZ2E?2OK)djSFZucM0d{`xfxlobZZLl*T+>lz?iF8hvR61Ve z0ACIFT`Bxx-~Au4tc?}!4&P+(Iqj#1FfED|?g7uY7k%F0_|tZ+}boulx7F1hq& zOCVOb7ksb5n~ra>noSQ_;ok7e29LhDU_4K5SgFz)_zPEw^JeMPi7c#Q)mr7ylEf%N ztVO!ZO{DM4c3Q?0H4YqAAGo)-@CiS*9>(>ERSWT`Z}T;R%sW)gO>3?absgS?YsA}a z&U|i>Dh7N#Ji%A^f1i9yx2>%34e$$_gg>74*K}q{u~LzZ@S@GadwATkrQ^b?r3}A5 zNmaxb>2-gRI*gglbDVM@#3uN339%Jve3VEV>}l~QcRL*5fpE`#!l!*^&1hU% z)n4Wx3=wf+C@plwL764CxskM1qRZP_P4cRpwUdsh+^&}+!#;@9WSu5dDbUcSTHJ>;i4Pc@;n9}V}kkb7bmOG1IUs6W#HfP}L{M^o2km;Rte62BaYNG8f zPxVbcn<}QOucU1w$H^0tt4 z&P`-03QXI5`d5@g^7ISX9kUqOD(t;Be?fE(i4w`h;gTKbe!7KNN%ZaVt$LmV zV8yJ+%op5F?kT$mwJtt<8^c*xxzGo_JzCH)`#~C@K+^eMa?A0?9UMp+bhTra=Rfo8 z8_rwCpl9pD0d8THZ+nFb($vN8q8 z4(^wV{htWKNyiy@jl;nPLi$#Pq#-J<)cnEl^F7b$CrdY*fR+JVBu3$*~_7Uk}s9IPlw7C7Y zSMQ652s!=NQH6RNzUE^+J`CP+7UaF+xaS0{#vq1}Yv*>%k z#lT9TUvxfEE`J=zerOmCX`LTQpPNpP!HoqDTw-1qC2G0EROgKzOh{az=xZQ*m2>nN zBrP1I`1a$Ri9J%0`5P1~8%V|eW3?Hxc~&?wj{$EFCT>>q4r4uL<;wm(X=MUJ#6qf> zK+?6Bs{5dufdhCPxLP9d@`Zso^UR9LcRYCEd*X`yFTcf3SXilN=<>IaY2%g%4|&BQ z@B_2gsg!|ur_D-QEIf=7Zzs#$d$Z|t0t(U2r9!N{hi=CPna35e<<}&5=M|9m)uc;3G5JOe)K)ThN-^;T`>XviA%T?(G0o;Yn=hw8 z`mKbdD>g28hUF7DAVey-Q7!Qa5BFm*!>klSJhp&-C2V??2B}v)Nxc*oVI7${fTx4M z_)fg2U&j2ihGH!B23;We?ko zf-(`XURIBFwt-J4EW_9hVKFqw0CEcXjqV6rwAOMNV!VYm263>0e+IV?BCb;vxEN21VFfP+&j}$u z^*6swn4-Xn)JwokUlX67RDJ>bv0$atvpe7Q9C&{hyYZDmni@mW*;m));3f+P@G@}k zSmGD-u3W*I1+3uZ;9<$c_523c%SbXScm;TM3UP(ZUMYC99aiv4@Yh+yf4LivX(F?t z0at+s=MdLPikyT^N3c=@?((*pY+D>_z+a%PEGF%I=__$KOn88Q1=lDcUjCao4xd@U ztHHG@iATNeu?O8Atl;0kUsMxUo-w$$j3l#y*MJ9oBYxvt^8tL-3szKPEx5djKD+oT z4nD&`nOTKu?7aW|`m=q1gs6kGMvbKJYu^7VLk{5e;7aPm^%H+bhrq1h-@*Mgi2ox0 zTQvUQ1uJ+1i=#=rw&w>_FSCL-f?H}6S9)x#iJ$twiVmlV>8*(?29#=bZZW(Ak6!5X+H z>1)mG9B?0i65rBP2Tpohz4jo7 zvifh^j){R9yyM=J_g95?_t2OSL%2!AbiU_Xf7OP6?4Rst$J(Mg+%IbMKa4OB+kwUW-RR$H2WvEwO9D9{29ebaFf1$0g8sHA0$GP=u(D^=v z^qm1oZRK7T;X{vbpwrc5i^%X}r3Z1g^`OnQC2hV;_(*)~4jx?CBg3Uj`M$epL&;#A zDt)+TJCOU4M@iTJA|2nR0esJ?Oq92&ag@?R*(1m50}RM5jMXZw($p%uTJd(%#@vOurN@ypr;u3QK*RLm@bf?=z zJk5cX%Ub=>lmHH$y`Lz|vBj(Ia+0bE3VMlvsX{|1@s8;N80?v z-v04K#3*HoxF_%k=EW>7xEHvr3i0!y-_g}DE4VkfmcUQDI8VSL60G1p;K{0_cb*w# ziCrPEVrAMFJlv3Y-r~}i_+$XAl(Bf}-D>h&D%8WVj((_O-r;jx)#zo7?!!5bpZnDZ z*Q_7P@HC||wx7K#gJm(4#7WO7PyNOPv>xAo1~T`Dw}v@+*U!vG>tr!-x&pwx?*bRK4T{hq68YzyAiVY1d~H!w{4a;zDIKCd|O4&q_l2 zq2SFgi5uEF-;|MLRxWB!X@$G!ufrgXb0z7Sk>8$RcLE%!wfU5G_SZKr*sVr!uc0k` zMcRJaR|4_bA9&y%9uD5(LHzIJ>$ndwE8k)#J@>8VQjj08IRlq`1l+Cs$o+iW<|}t0sr)x^wVc7!=Q>;xzHKmi*8U-@-3Z-o(pnfJ9uK?o)SmyU%fRj zt6@QKQe(lDl8BERUX9rcvr>%4=$;)1W_@%m+x-;>t-hem-?s#9hzn^#iUE}z--*>}Q#Wa8Ywmr zPF2T(@YESr@FZ~cY|<}z)Q0XL#BKBYp28nwV5KzN$~$XF(=KEHr6G>` zN4Xa{5)#+p9_#lvBqW~P!*!GSo>lXmPCa_16qK7(NaZ$4Y{#UUmCkuTo__RC4mG8I zeZ(F(roug~jNCmdO;6yWL=e)76?$yhDxpI2qdFU4$*!IbT*#WVQT)@cuY129BURWR z9VfU?)Wl1i2yV+4;R-&CP8OQTAJu(JYj4@rTiGc*=*8 zaM5Igr?ybpp>JD_@t_J;YF1r7rYqZXzofK@gw#8T)s+p|eY?H62#GQmDo;F_IcxTt zak=*&@xYBkRx>rua>&T@jxd;MzTZ*BQ;$6Vhf_(!Ub#R>d@$O-_iyZF==VtOg*qko z+n`Ac@l7$L$a!x&`7IEYkprox21$SNP^!et3Y{e@N-e1hg+w987Zy0AH2It+l`!*Y5euPxdnxs}| zoG`Xx4xBXDf9w(Dnh$A)4M|s>{O*Dg8yvttfj8I^_sTGL#xovR5xM|8+L`#gwrdI) zqr*y}#XCu^YVW(~Y6>AuizKP#+YMOiV-8#v`_!gPCM2Hu^j8OjOICcC`sl}1p$G2r z3A>~#QNHF@ybznm%v;06L}vsfBhbBt|12JZ4se;mqR^= z4-d!bE`_&EA$jMTKTyYme#F4(E(5RpO#IapWjtqRRxW{)*UQooq8!q!Vv;_Hw(p0} zQo;ee0zA2tc+Nm0N9-<#74=sMZc$6zzUBp<3NkB~-5lo!D>>9{W*xt*Grru|8#Pdc zfQF3}FzMrouULskSk8OFC$`1>a*mwg_!3DP=alHM4nI~j8aIB*3`Z^*ffDrtr^+=Qf=pUN?TWDejh z;7%6A7u^ZFgr9=J3jPB;+KRZ+v>linF)NO(72MRG_|dyTe`2K{R<6jQj{OTcbmwg~ z`yfFZypvqWd*IApvAn@zkW}m=uLO z!K~nN;C3FwM~*eBz{4+C!R5i5yot|x--H8UR&WJyXCLCX2M@t~mRZ3S!A%2+51CT_ zH?}XpiqxNgyF?J*vP>PO}v|)*)eUoN79ajN7xXOD|F!CUWRByQq&peZ@Xc)Fk(ypA*BiaUe<{9C#N@LW5CX= z6t>G!7M%z|k$pKNQf*N;r41~_u)V=0I_HWt2 zPnskZ-MzS~omZAoPDp$y_4MFB%5gl}D7RcFcjnR^c-qZMmp&t<1D@bU`IH_TsEb!A zVdbJ~r_LAtG|=U_;ycQHe7fo0yeN_sn51sv?JfryHwbWDPSNUG($L zquZr^ayO+W_BH=aJNB4E2Ei7>7+X}e9qqfGQ@yU6BaDpHrgU5^|NZ@1STzwHZ~k#{ zKkCy0**&eL>?GptJaL+kBUeeE$Le`vA;6LyNDE0DFRB+}lmG|*5?mcQLAVo&{ry|K zG|okgiTz}WIa>%huo zAhlIe4g+OZNb5XFI?g>7JuGt|sW|0Y)aL0)NW3O>N=EXN%bVRY+4GcF2&fW50f(QS zi=K^zMNV$u0b#@s?z(`>lv%l`Bb$qEp#t3@)k`F4-)glGEWN{lla6n|=UdsBvC9J2 zDkYznBrE;1<2q~0AIp}4JrJ=Zi6WkEI0HgPpA_GwLK<*%T_3L4uf ztk_!nsYtGZyBFL8Ka#sskAqlVWkJZ@NgQ_EtWhf9lAn9ZI~i5t4R_m8a$jtEdkL1& z5QL-&oj>2uAC&$#4!{S}3PHMglGkmr0Im zuzU$CxIegVHSvXNsTc?_D|i6-hg#wzvt+QC#H_ez0>R^&i4R?th=)PU${kHnM9ptp z{a6IA*n!80LGW&FCvUU6&vG$xL=2LOcY2vN$)QwbT_yxgX|fZ!LX4&x+~Ux>LFp=J z!NDj*QN@JyO_EPeIAc8mMRC&U8Y;61iJjoUhCJb{ijDf1S*RffOCboDtwRCtzDbI} zXZaA8Qq(c(92m(i-zZD0%ShrEGwXRct)cKwdrtntg63icibdfP(puyY2x%CkSvDjc zw8m2w4=dq7Qn9T)SihIO`}rEuWCxN;>CVIA7<1sF#!S&4jJ3LONL@Wh8oPWXnk94K zqJI0bo9_`e-S!XU0-pTOHjzWxpA1TnP6Wz`^P)1ASl`e_zk!lCX{h3UcSs{4)ej`; z-RZY6nPm8#uU%a#nD_2@US(q@t z6Qf307_;{_-@v;rg1jFpXs$xvjTlHQ23+F}@$rSmxACMCRxWDzp9XAeWGtkPxg?!d zpMW_KbKs7lVY?jrEdrE+JdG9KNr zgeY&1_Rem>Vo>{FwAV~%BaBIV;o=T5{N~fi{p!2k3d*2%@tu7&z2eDlMiJ#mL^Tw`Bxcu+Ul6=)sbkShaU3vI_zl|5` z+x5x+Rt80+_Xh3u|Nf?HXV^Ajy;?ln|4iq}b1KLA-F$IGACXK=5GAwf*4R?Kz>Jin z&G8c#7!)JPu<_o1Td_P2b4QlZ!j~?QWq9A1k3uK%zVkru?w+xPN)yv`-L|=fkhqvN zr1}0{PGzCFh;NNoQa|vSyLjgh#eMw~610t>1Ve)_?vs&ZX>tK8{L=UF*=6=UU`sOb zHoWu73t=roeDpVHO#yqUx&VbF#Zn<_FIHh}#)`tVRS5n)iMZb%D(JG9l`A~<@&-P2 ztGMxOCAJ9OG0Ehu*1G-`S}0;xP*XT|gIDk1SB<_nW=xFOFk2x#3( z0b3SlV;4FLOH%PomM!zzl5m>7LYg9L#*RMJd;2;pSik{mT-D%tPl$h>vKiY#n3X?G z8cH7*a!LKDh~)3jhw>(^<5YP{Q$KTP?y#{o$mbi%jZ&don4XV&3$udPfj`kA?)~sEhFQ!CUJq`fOMK|u1xGPYh80!z9bChl z_>@_T-7(OBl}j;V(}>YHwGEIu*ppQ2ik_B?By*susTSusM`|+IJg*U2dpFWb?##y3 z!8|Ce*d@*E^Ok+CrU}xo?j&^_blC+1Z8&flNdK40UR`a5G}ectFY8{}Hs$ z&9H}%S-Ge~haGR`a#i1Ix*Sp4;H~n8yrWlXpTt`WhymUXt{6vrw~;-Te3=zowhsMC zBJn@UvyS5zm$0IGJ_4?jIT$)0SBT0o|r?t z-FO?e%rPq$LSsi0zmU;uz%SbZo|5ni5e$)%SC~lMTe=TKuT+|@{P)qXKrQdz`Usr^1vv zS9Tj54bNba$rM@-Khg%BP{1smd62fzzw-{n`oiW0x$Iq_+nFlrX>zWovaD?`C1!-&Ne!*44Jiwj6UsV!6{+Dzc z`UY6hp*e#WR1;5V36jD60amIAab2tI&q!g$*JZ40qillZ85elFsF|~#W%+^+XV9}C z23L)FJN)?P{i6dPUfcf$YDgFHuH>CY3REO!6lgDv7*pHh0_vt7b}7 zL+T1?l`cu2Eb;vdoB!az71VaqD;o9j3Q|8klHNb7rH&a39KhYc-wHf-V+j@_m=)X| zT*H9$ExN8)31?Pt55}Jn*BtE@i6I!Q;GW>|hQ#~!O}3GdWLDI-7r4GTaTB-g=z5ry zOL1(pyl{&auge(?&TRLaH@sVH$oqBJKy=S626>AOa-rw1DTsAxJfVv zYBXJj>U#Z`A3(Cc&>A|DHs|LX3$c|G9^ii9wJyZRE3jz*vx57BR}1_P)iXb12?04=a~m^Om;lsE0sEHGD~$TH?GxMv^&j^`L!oztBv?k#xp`ATuNo z1n*aZcdL@;IQCl+=M6|882pRC|A?}v#>X09#+06pB4juvT+8FZoyIJ-YJ6I6|i*%9T-&2XdRh^90 z2WI6GxYB#WZ94Z|9w3j<-I|H~qu?I%mfXv(nAhQhoe09YC){dhzHjbmME@gNOWF7pbBi~SHH4pQrOlAbU> zd=&#}I3Pqk_)|Fx*3}I(GRGW)S-B8vCJ$z#-~>ps1Zld;u7hY2a6pJe@E6JyVq*PL zOw5^;LX>y*WbqU0GjV@Pg49``q*pARv2@BDxYBG@h6p6+8{R!iw}6L#-ZSX%bdUv(v$2Y>7KJZ@Pgm zallGNinHQ%%Xjh@`>ji|Fr;xsf)WnOVrp@o0uw@?(Ts1r^ zT$qp2av*IGq_?iz!ibJJNUKOleSqPIFU3gP@NNOdwlGr+akKlS!+&-sBzDjfFSX|p z62}TjCo8WL5-ZkjWcPGJ;vH`Chqx6SD!(Urm8Fu4R4f81mGu(W_TYOdNQl$g6>i+m zp?(wf`Lp+;{|{SE6<%xU!J(3KYo~JPPpJ{?Ay*zUX$q!H3I;q~j5qa=4@t!ua9!{( zTMPLJX=n&Z>uY~Hhcyg1AVfa6=4;{?A1Kbn?kZTh(n@RcS0ltHNMA*g)a8x!By1Lk z1Db9D_=iN|-{+peTNBL6g;;zk>JW#nN%tzkl~f4t_bKGPqIW7LAuI+bZSnfOmQX@x z$22WQ;UuRrTK+N{X%-=1gAg!%`^aDMEfRzU{|v61N(GJG8Jmgj4p#7DaN7*xXR0Tm z5}6ge1Y9ALc$v~7%#N8Ahg%As@|L)<aJB~>G$T^&V~>1Sz%!5HF#e*^dVLHtG1=+*eHC#>K# z;Ei&Y><(*DmyXdUvx3)xe-rrlBy(H_%!)Hx2Oh0L`h=uARv3lC%4PgaJ2HWgI8?ZI zY6*K{S`Y7!s^tA<*Xm$QT@Zuwwz#RnUex;zX@Cw%Up2qSnPmGp^b?d#?QXW?r+WT_BA2z zxNE*xK4meu<7@Xm|2L#9kosAWRAYNY4}60i4kQ)-_B7gDhkcIi2c)gmB;6!61`8O> zfr}dFn#$gBZH2VPfuvJT?!S(W+;9MI1J`jPuGeCmh;?09!P~*jor(Wau>Av;Twn#4 zt;ZMp1nxXwFd7xJA{9CCk8Y$NWj{w1!va{j>e+OC(<6kChcv~5q=OP;Fd%0R2%!KT z<3;>IX4x}rZ-A9MnwiIL|BMidkmmc5v^?hNa_sqs142AuSp*PYEK!E7xy;ICar8*9 zgODmgsu@bspZ(sHV>=BTIB7snC)U9#LmC%G(rwdr;}T~M;40wu;lwK+_ePyEE4V6n zyui)vyJJn6S-6?rS~f8V1L+p4*A@6(8?4sYdX@-D52l*a7> zF)(4(05^X_Jm}&#jE9(&dYd@8&K0jU&su-NJxmkYq7>3D_MX&?^(lC8RUEr{55KCd z8=d!nRAOJXNAhL@lF~xJ(hLe{k{sfVT0~gXt~U77&%_^OAKHcqH>}*D+DXN-M*upI zmY0%rdRrwHAD9Ct9ewC-PgI~Tq^4g;`q!u$V~o$>z@@)m(Wiy;)>A$-6uCZyw{bOj zr=|BR!;i`k0}1GX2i6f+Zo7b{&a7P2?%H$Ma;`q4Zv^S2znd}1VGiI1;57o@{(i=3 zY$%5n{2BPy?-Y7TqYuWU%nEJ@{;iR?|J~Q6cpeBVy20n*$+A|gE0@#qnSgErRxXvD zH*$qJgLpE|4ob}8R11~*ogft6xeuiL)pS!rV$<5W-x%t@)dKa^8uCeN!-zHimbOK6&r`Dm@DmY{Z}j7-rVFjJme)i9F{XGhBjgN;ZMJ znUPTVlXP_bEC?qJ4z+M$BU)2vmEB2udD^%BC<-2&R;}Vc{%#iRUc}!f7B0{A;~aAi zS0!`kpMoMULgMfKKDHOn#~Cz3CfOd8No3S1bXF`M@E73zzQnJ;Em|id$*kb!;Liey zC!TG^#D`hIEx^r!h-yurN=3Z4yzW^cj5Nd(TIr)J z>{IKq>qX&-_8RWEGI!jpN7Y-Q5btm*WXZ0h2hf?LD6Ww51+u4*r!}ONQ6yEdS%te2 za{#vikBKAx=bQjE9cD$7vIW;oBEDegAr*Y-09G!v+9zKl4t-7N;fttt@D58O@9Q&* zv1q_zfZK!1WfPYe9MXzfgcaNYTv6aUub)oAHfUIJfQ~GS9MT(AEY-wwI9R#5Fl)Zl zf)GxSe)~Yu?-Qai-enHp&Wslle=zsdc?|nu1$P0rFD8B_VAm#eTd;z^1h=RnzA1O~ zN(?Dr1$PBc7I>4R_GR3FVMUkx3cR3(^e#1Sm~%2KmtydMdI5>&exltfWm1WsqL49C z{Dhi!L%`@p3Rpcn4zoTMmZY+szudVOV*~D3;eaBHS5XzOp0-DWLBIJZ}3uO;_`#L`C-)! zR!T)Ywu+uPtiSewG)tGHrdig1;zRCm0QUv2e@a~cf(mZO%nI%Y{zRX+n&WwN4$O)o z{lVo-hcwJau^bc1zKk1qW-w? zz7FR(1kz|XlKyhOHyRXkAgS0LOi?to;Jn=vOA3)dD7>TG$@}af+XuMx5d%C7+{A-; zOmfT5cmxM4_-pVif8sZLI-y-KD-sR|uMZ^NcVpdJ>@$aziWFxKMNymWA&r2vIGChU zs`3_K2_Ftz!Yic)vDK_dNZlhz`ZDLpK#WS^03HP%DDbns8?Zvitl-h$dT&U-X8ln) zWDP6$8}J5!e{(7G!Ed)=MJh4is)?j;n>;T7yXj%&Qu*)DLAH1s3#m&cNl#B)f$Nhw zaCQ2kWuF5|i-S}#o1|t>2HRpQIUI1N;=zMI5+9atl7;Qbuu=$d-mJ66n}5Z_`T7-Q zL`{HqKrwk6KmM>08-x)9i6w%+tR(*Szbzv$L5Gz)hKcTrHXuY2q<&vWdV5eoG1jW# z0GU z+Apl&>EOoo#INXnc0socD|iNY!*}ABs}F6)0xGQFnc(jmh^I(cTHvM%D|i-oeKYZ@ zE8R}YNHQzj%iKhgOxE7#I?u-b|*P$35Y>_XGTPgr&nyNJ6}pR?OjKHPl;_whXs6kyE^LBKzOw?3z^r%EO+ z#9{%g;053oM#N)xH()u0Sv`+ zfdfg!H}mUD71%ueGo+UGBt1M}DxS772d--7-m!R$#EK!UbRelx>(jIN2`n5Cq6FOW zC2>``G3dgXl?(B~E$SdnL@A^neMvf6H0teV7&eE4X7O@rY4dm9UBjD|j`ywZN^z{POYL5m>>$iTXgrWvY1K4l8b-HQ=wZ zDUQO~_E>B&hn1_)mYqFs5fYo`$LRii)A5SZ8i|uxi-55?6!5Q%JD9Suu$=c0lj^<5 zsSZ;44TcfilwdkO3I;+L7`-g)96y<4go-j?6V`@~cW41-w= z%B-@jvrUb3pX^UezoL`1o?Kl(tjjA_6Moiyh*Qvlm`R9s^&9N>S2%hNIc<7q+(o%3*$kydO!qdWo{sZ+o# z+fZCYEG%+T0C&(J{?mipGHkwrl|s0l>p0Ric0=bvstD;DZITX+-18C};^Dw0;1qb5 zZN+*5sk6Qi)zBU*3(Nt%l@j;xZ>6tD956 zBX{DH2?)!1XUx*#Uq=ycTzlHa_)FCZW2Ya+Inji- zr!RS5v){4<3;l?J1JDAu@FU)9?4=wTNoM6jEZmeb63YbIklF;1G)MCUwiYl4PUTYpPf%on@M($}kn4n%we8YVgI4^*=r0>;Nt z!2G$*8F+CNVYyr%o`~RAf-2LxvAdE!yj|nTJIinn?))qUs@VWsHj%hg*^6Dc&|u}F z-ddM37+1+Nc0_3;t(^Q5rlQP&>NH06r;a)e($gA*-pdf$*B?k5`rZxiSuqdNc3F>Y zc9|wj7RAF~Ia5yo**=H6T|T)NXzs%Vj0HiqM&Qp1iLV?z0=*iua@l%Vt-Fs5j3KQl zCu#39lWTAjfdggGWd!p3-g%Pb?sux=0Ol>~&n8DEaQ{$2?#`ztU`oe=kW_3et=mRO zKxzu9dL>DtG_JW~)gKO=bou$*n`jhfkeYrcX{5_IEK4v4F8^WE%56Ar$ql~3^J(!j zkc%c2n6VebULc}ln-KBfB3&6t7MI+`7fB8_n5^dtvDdjdfGCOz2X{8| z3)VlLhb`dJTRwKkcbqhHq*BmMsbtEnLSG(2 zO;$?3mXNYV!~zG3xUDD!PxM$^PCIb+EIAHURroY=XjJnZAr?xX@1Ek5WB>i(_TM;%6!2#S6+`)r*)_m(+EY!lvUX*i!p(KC| zNxQ$dpnHUwi>z|_ z&8cC*tCh&o8OekOQZku23pU{ESx5;L-~yf(L_F-rNvyUqE0?54&)6^M!(T#b5lYgT zo8>TIWe$9CeMSeePd&IoTPJ8$w>}z!kITS=3+sGm+@I)dUqPx9L1B9qRV84u2nRmw z@GA%SW#_*pIcMR(+~BSpN$vrfO1N9FAjsAo{6`e=bKQRrl#ygsKCGto&->V^@_;xx ziNqm8Rv6>2MsVTMz4Enb2=D(#_)Osw6kRI(=c1NE(sk(zKmM-HKT|7PGGH!u`YN=1 zzDVDd@IjzvBV*e!_|Bo)7g>GS665G3FS zX;dvq3y#*$mXTx*=n(zE{hNrJM!vz6h*`PP%zLU?aA?=?e}$!A*V!F?^W<}mrPI-6Kl9?uD}A|;E_$1U6>jlnn&5sUgi{U5)aU!n%@c}t zkV-s{cMXpS-w+Vd{_gR@Z9+ue^*#8mG;Q^-rCf=3ZltRc5?4q@dYlr5GGdcx)Yx|y z7iS<2-t!q9yj72vdU%e6DxiZ`k?U+x$+EV>lQq%3ZSpSm7%B+va)#u-JZS?)h%5+r zFu3b;;^+6Ig`kC9lr`d41W^tC$I6WsP1 z4&V-b_1(Ju96G(o^$6N+C<=CTq=NB*a13!-@m#@G_nn0A^@uh8?Aw@|_(ES8yi;D0 z_skLMs3jJI@~O7$%+c)FvZchj%z}y)o^K-N>e@M58m77`iA!=~!-@YeqIivB)O@KJ zyXkwe7|#mhl8ih)VJ=1N@}tBNy@v1?T$$nV8C)UnY^N^6sR>6RCjL~2YLN7B8A(ljm~37H-2& zzFp-U`Ryn9e{AE2?NSD@Y*jf5Tw>`brwEfqu|mG|J!OOh;^7_mnY@Qgr!PVy2BIc_ zKdm6XMt?#n=IpRiR58T*&>CTgEuzmlmje(r5#AM*q>X~q&&cZ@Mi6iS&jvTwq7btX$SVPkX^{I8m2ZdC#e=mn=`?&_^eo(^#F&MHwyLREFij+qi46lBgEDyr#BP zVd6bvb~&9_^N5j=dAu%crq*mU$2`PT^rM(A8spFySY#?*Y|(X^3xzEN;(gEYlgkK< zLO#MfBbvMe9It%G^DV^SyrYYL7jDhs#Qfx*nj-EHpExS9mwoaP(D)4neDXkUDMqsh z%SjXJA`jq9e1fz=kZx_Ajv*Lx051SHilGp_!ez16$*c%n2>vvVcw2LAC|1B=rO;v@ zcgS+yK1hootxq6n_w-G84$B<4!}@vS{!iG|`x(;M43gd+cNa@@%z^4!%crycr^f6& z%(?%!{h&X0T=iim*fZ5)L^RB#h*oZ1WAUsNaluQ#tp&a+^8=neGAlAD1(*Lo`kcih zrSOyxR?48u=OM-(o+=Cy>N=N(eO}qBa~VYZQxT8DFGIvHMHDfhzSjyY;~_35Jtbqv zzWGoNX-x%54WxWl;e5e?lPZ3#9EB^S0@C~jl6tO5KZsXb;XqQcr7gd3cQ1!_FP-?B z3wZ8nj{rg$(>iVhgR*CYBb`c=;nF6Q(QPdjuUSdF_bmnXNVp2pj|z^gSKGZ+(H&Aa zfPVq^S0>*3#28%2%*wWJGj2fK_Ev)*7Q0}j(Bk_s|EW4Hq?-Ss-Z?zmx9k7=0Bcpl zX!ca28WAmxDPoX(_Imt@0CB;;fw!9y|6ps4H+UY4#eUjGgAs; z3w}Q_m>(MtTlq=2!HD&Id}I%4aun~^5;WJ$2Eqjp8Be#)-!noi|=NBur zntIPh?@)_;t2~4%Yg+UN7Q2u&1&n*papI)!^%_b@OwKZ^SO_R~H(w6Ew!}H8L%@_! z3Yb6VB38p}5tb@EA+fW<8;?fvw~G(9k9@fUSy{L&5)Gyv5tAb*VvFUF3m7>dE+_r( z+~@|JmhX^$6r{aNR!ZO*KO7LE0o*Z$LM$CrjzKQKu{{_z#wA4)MQFTVBOD7*=UD38_{XOtJS27tY4v*Wcks zFEGHIgxjOr%g`V$jdRp!fH0+EMzx;lB6zi025u^2dg3g8u* z#52}k!e(-2xK>P2q>pT0kh=1it!X0VUhk5@TRB4 zp9KVB9gJDIf)YONx8l%YGviQrE5WFAkZx-*Lr3D#KgF ziM*>mtZ2cS1!8d0k^Q#{3lU<~B`Uk@CRO9Uj^4p{kHZS-T~aCt_|}~Q4)WTM)k_wZ z3use)e=IexE?-IAA)TR5tjiyR+NNxb!V#*n9K9%H=KjI6@D2e2b0Pa)Y_{Rh^%0l6 zQR`~())TznR-MYmY9eBQtFuG}{yD4(S1q$jXG%zEzz`fj#rd9RT{kmRZ1J+)II?~v zhdy06EzD>|mD(a%;lX3+%g(9vm0^8_U}9yakF)!O%e~+Gomw2)tzH<&p-h)y)*Sk$ zE#d_sF^hShe)7WcYT~e31L?4&PTr5iC+=}@>>J?V)(ONfHojKIV=!3xKBCP+F_SB4 z-n`BHiq&C*{(RP}jXrvCj-SSU9F4Q8jdF{Usa*R5f7fGk5=!T!m)Csd%b57jfdSZ5 zuLEzt59Iye>PbuwSPbsK%Nj=*a7c66VE%dN-`gG(aK%m>l`(~o*t!?z{X-v_)P4;FV}itaPd^9q|{eldoIxTlY`=uKbBB<(zdKfAcHYHJ(Q`YlC}pjy;nOj^xl) z!?C}zZ(u(~dP+5vUW(B&BfOJ|BuOi_2dm^u$2oUJ2k%I-qL-!GV*yw8gRS6F6tqNqz}oPmm1Tif@U47M2vy z>96Ui0TveA3jCeGH%i<$$G4n#X`YGuQ z2`L-6SGkk>iU)t;l3+nN_gns%!h=yU{|!t0gd1nhV(ms4eT*VOBiT~$1ugzjlb3Rul$ye6Kjj3O7NhgO6^sEWd?R^ zTp4R`4(J1^9i)ZKqyNlh05 zPy;V<2*pKo2qF4w3Nc^6fpGcu9%;^ZN-a}W*j8p&c&C(*cg*~Ftn{)N;IF_F%ZS^S zWgo}87_g$Dx`CTl5m$L5t-^Y4BviMq zqg9>Rap(~j@XNascR18yGm*`~yikUVtP8vCDrfJkz|o^5aBuKLf!i)m!cKK&1@{4O zRUm!b*ireY6)g%3hpS;>I1BI1Ky^rHk{>h!g;U7XX)$06H!M4MDu9BnJa^2QSvK_R6D5Fg% zW9@;3SW{vpvHm6q276;FyeZq{BEEzRGsVd2d=hLtTlFKCPek_*XX&hV`M;{&ZA*TM zWbiD5YLazXh<;}I_%|+E-lMDX=s$vyiU%&1Zx|}h&!HR+P1<7T0F$7Uu|Y` zs?ye<&y*-U9qpV zLh{=>u7S-7PlR=u+tp!{%?xV+l!8Cw;Ku1n;X+Q7vY1JRBq)w56bHbPXI(u zDK)<*xQ@bcSUJLBT`;+eMRj&?;1S@dA#}K#KBTV0upd_RsFC0ip~Nrfm}uaoO<1Wk zu@=|7{?ihtOOa@r#Ttw%+YV1w2H;`H+l5|u zsU+-94&u=9(|`3KBs#u(;eMJ;VB?UTUM^*~roK1?KPW(soc2-pCSgu1CcGk|m+&L2 zF8g0r#}^usr^l_1>v79_75@2_cjSCwsFi=TL#4f~$9*p26|t!=aqEvqb_$;;JENP@ zc>c|DB&m2S9O-mmJLi2Vpw0%~3Gj9-BJUyVYCZ5aGGcJviw?yoao#2m><>tLNJu5Z zy}Xj#XB#G9Ll_IfX8S6N^!bg`!tv!(q|T-D-);|nq%izy z8h=rxh2|XK3OSlHPLD&Lj*m7IiagzsvDCsrnW+6_WD?&(nWQhx#OR3S!(|e0veK0c zXf-sBt?{S8JM0H}-#GBNAKs=y40dNog`raEB^$Z)^goJcP|Qp*ejMq@;L)e(0aUkL z9{g{)w`nw2`nef7rd;WjuOzHF6q~ZT{9TSio4Z>Ea;SIkF=1LJwsd8)=cPEf zG#o>|3LS&ptjy2YuZSZ-H=^+CNtX(k&PC9UUE8C*}7E(n^lAhUK z|42rXIdF;Tnl74!)1D1!t}{s&9Xf|m7IWaFi!%+p35i?!hCIB$o-DkBxARN#zV!AC zrduoqmy>hsX<;}lz8+$~)-(bG@AvSwe?{KTF_-_5kz_HbA#~Yvw7PPUFpLpJxY{paI*uoHs?;R?^a@s95=mTt{d#z5->ygx*d_rsfVSRrLGxC1{CeA=U|dv3d+H;3?5738{}LrM{L*F`By__X<`Pm+1V(!{%{l z{oHMD35k7n()p4yzVma;Hf-Qzf$dSky0FvKj!XM$yTb-jiRm40x|>T#RQ+zgzY!Nn zJ`&cgr-WCJEWs8GmNxh&a5I6A+^;YWA4-H3&rl1%^V>*&%Kj@F0JBn_4k4XGhRcep zgdR`4CMCM}AIc?_^JL;Xyc<=Bh*9#cthbu|@BtnIu(%Yl%g*3#^ZxBiEU2*aWbIz3 z@;fpug1^@j@~?W*Qy$$pqJVz}Z&fD#Od|?Mz^u4Xi@{U%iSN2_0T(K>Qfgwh)sOQ3 zMTine4W5(q%Jgh(Ct(h_3QECsOo-<#9_onq%3FmW(LYop>%ZcYZ*vEP+5z#G3h^VX>hNW4=Xr>@ z6{OLEbkB>V97y3nQn60go-1UVsJ=j|7)nu3XT;3KA;AF?q_5z9U(Ntzhmz=}?^mhlYY-3rI};Q1Y_Txgl#?!i>oU2d?2q4LJq2U`dCh!5l* zuy8CEN?8!j-RE>wKXQ-O=)A0!uD5q1*5w&xV!_5tVqOlN7e?yksLyDn^(ZDGpNa{O zUlEASH7JaV5qp_Km!I&b^t0|}SybP5c8q1@U2xCYQ$~`-AaAjuSe^Nst#LL$+Ezi* zCXIt7*h~%wl8WOESDl##$f*(1*lLnWZl9ipxjP)VsNW;H@hj4cd++{)f|}s{N$^gV zeT>Ca7K8I1Gr4~soVsR6OTSS;V_bfhl#yf(;4R>Gb;Jj1dPHGv0xJ^x!4hjGK4Sf~ zz4#_DtX$~8gbn=IPJOYbGorS_Tki*XD=XFZz=t6b1H28qLjD!&+oX@leZ^W4tZ3}* z;Bv~uCsYKC#y4bP{wCy1wpUww5r&nEjLP)%-nq0=Sk6Xz$;_E>|z+v-hMqs-E z!gA8XQ@q$}sT`!ARjKS^1?y?}&IcSgsk&TP9U<{tAAUY)H;zai-c5qH-^p9O*jKKt zr-3Vg`)N?r`I!qbsA5)>rU)MUf_TX<*RgMcS-H}D!xDw67Dp>Pt0Myu^$ENk&B@#L z*x(_!FcAY>2|U!2c#-c~Ok0>0r745Q+Y#Rya2RW3%*q{z?zP>sIdo~0;aNmgf%hlD zdsXzqGuZlv7~rbl-yJCG`k!o8V2d2A;A-IEj>MzaI1k2?O<2Lz!Sh^+|0X?nF@944 zE6%zG_zQ31Z82tJ@i$;txw^QqM?x4Jh&AtTJoEyWaQ2-OrfgYG6A|r$DWb$2PqcCt zm%4*$@eQbR*LG=hrI=pn&5ugtUg!!#AF*vYwzc~T{f$oN?V=Qj^F9JtZ6d8GEqA5TMp$C;M&kUaA$UvIv1Wt}<4d3s^9aW(6qjP@)lL*Ce> z4hxbfiIaX?-^&MS>O-oYP13Q|0SEB$DmZ`}fO`x4w)YlXANS{5o5c4W# zMNqblOwl8Wi(cdbfuRsYJAD$!Rr=AzvV! z7s`}QruP;!4we)baJi#-BZrRE{SeaY(&=2U|Cq~`_RJBoN|!=@IySrrLnQ>}{9Wa< z_-eFuwBwgn8!qhZ#--gDS~ZD74@SS{7c8XboGjv0CMq&*I9>}RXY!1ayP>%A4qj(M zik!6O^1m0T?z=2Z>8bXx;AFB3e$_@(wnRi9LyGv}sMB;Ty&x`0Yfg4t4Oh~}vyq4u zq#4E}o&L>uDxL_y0U@lx4J?Sq%w5zUA0LI4D{YK}-cPJ{ZJ<@~BCYf*Rct3<9;6j7 z(J%I4e7)USzLS5j_I~H2eOw{Zj_s>CWY9M62!~cH{mReRO^00=BmDyJNF%#9;gp@q z_?QTca*!jJotC%sW-j8xK6$~MYQEKPH|ZpFSqVIO5q}?Hzvb?-<3-~5Z%4^h-21pt zS$Pu4x-7%?kJ-&W!*7TDnjw-hh0R7?u8FwKJNBbaUm{|2K1EEKqK#P>i%ag}q+{mIYyY4wTp?Ba zOwynWYm>3{3JxR{8*kqS_<#_5#wPAGKkqmv6a~G4w|g;p%MU#ni*4?RK~ixoF?vnN z5}XV-NS#Yas+$?4j(a2=5W*e&T@`Vg!z=zDSzjFxMALn(kNDW#t=Qe&-Q7NRcX!f) zNQekXiG%`5cS?gaqS7hdAT7do=I#s2H@|<+J@?!@v$L}^v$M0fsLVVPmowMG2`y=laW<=ZDUZc&Jav(Ai);{3)V|Y zFj>y~*!p=F2@*?M^W5YynuH6y&1CJ^vvA|MXsm584bJ=Q;Y8u{t5$olAHFGcCz`n2 z@cV8SyHc)DES4w5W9ys`;K%XMC2C2_PF?woTz_2Rz%d4I?`b1Sxt& zLCz^1!rYXFB5(19XKY^P%d>;HceB~Y5gt!4N`aa&ab(^vRFoIW;P8pcAgTQv7nGHRsA8S|v*7e8g2a6N*3J}4 zD&||T_|8Z!#)MVY``JpWH-e;lP>@RRTbRnRP+X9CmwF4sVli&m&|mT#OEPCeBNybx z#R0->qCTn2^fZ+Q`6704y1Ji#d%L%?NOZtxV13@*6BI@l+0}kSEf^a~$6$Jd_H^To(J!69* zJgl6ANrbx|2W?kUeZjtN3WmEy8o7_Y@D`J9CPG}Xah!8H+?{jJng2~#mll5&aiOY_ zZ&jU_Ef!YUMJ?qO--U6oSQj44g1d0?_h%gK$3Y)5%KUNuUkLIw%BFl1j=vp)122&^ z4OBk7Z&}H!+u|V{>C_6-Ik9>>C%GlCaS#WM>FaNd%KnNdFLEe~ zvWoD(0b>(!cfm^0TkRQtu=o)_4PW$7x{!<1Pg)Q@`$6jC-93}bz+{={kux;nCg2Aj5NZdX; zXN1%hNc;pf=>t*omN~7(Iz1eK#{rN2NO;;IJ6D{U2rH^O9{6i3!nF$YhT`~ISh+GR z2)7o7jbcf^*HjLIY686d?aBMi)6n*~P|yIL2t3uD@L5UKQuw?SR^Um%6FmvHNr{lf z03TN1$-q^;2=~7b(u5z$zzRGC_-k*%yN|Y*jw4H9Mb@dnRs0FhmvX~ggIOtSF~x_n z6DtT3&w3qk;#vh%)8JhaOx|-JCnw=mHZ;(Wrvp!pCj7s$C=7y`m8*+ogZA7e$bD_| zkmdf3yTVvajGePDaRvfqK+rIT1iQ9z#<-Qq0?!1V9!vP`eY;$+8U`!yU%(@O5Z>o< zTo5{KSaJQcfSV-{9{8jWCKk-fB{s)&VgqU>8&roRqOMqdOBx5Z!GTNo%q8Q=1c?bx zp8S3;ymR24nMd9a`Y$_+wOMFzR4ExJJubGH-MUzK=fc~(h`i5V{_j3MhlB=E^UgL` z)-i*rqd4#TL&`d$@OkhK5WE!*cgG`#X#md$Zcs|9dgF@FqL~#RaufhJswaHuM%9h@ zSqZG1^gicV*Enc=MyMHeayoIHo0HnEp!1EeR!6=DoY|btxh_3Eko_K{5P_BC9avx3 zIP(wQ4YKgSi+~p@5WfEVv_)7xh81`*@K|NSCtg)DL*EH2@Dkw4uL;lWH3RQom=$;_ z@EAkFH`bY0;{_0`Xa!}!wTuOw*-pJM@`sgD6x(8<%g%0)Cw1r%@w+Wbp zS6IjhcpWQx809$Ug1#QUr-T(x(|X`;;e^L8WJmBbE1!Gi=I46Q_yew4Bypc*)u2f; z4_x5};Nb$U+;eFH4j6=$(hIuK+*Sj^;@?5yFQ^p>Br)D~B6>jP0K5_S_awp%uXpK; z1$9_~HvuopBK($eA-;KJR^U=~_|7Gt@D5Yg&cn5U6}U9;+(N>``{!V2!K}b#fHxEq zesDu*e>}xu1uhHRqJr>^B4*Y;WrNGLy6obUi=g|GigQ_R* z$nGntvxEL(x(Wx5dS!jDJ_ISuZLW~Xaf-_b5-wknHVH4Q#%I6)&O{f&Y3%_!6IKHV-?m2MbwstCEvPy7o)FpT2 zaj#LuOaxW%f`!u~Jav2OM_ejcxpF<5=4=NEWl(huiF!qCf)6$`zybJ6;7acaH(RVf z6I&!;1+D_TT)^ijEWkL0SrJkdc$o?DlMY9q3t?6+WPH^Kc0tuZHT+1_oZ?C7g_r|w zadqH-90))Ap%+Gc%*qu!FwwCa2WicTzXR1*@NRM@Z{y^PxRaR%uCWGiT$$Jwpkfbl4mV zFU*RXc>~-uitu$7;TW+nD<|FmjuG1mqXnuxbV8I-C1E*d8>uj zyXyy8ah_M#+;&AN-y(=!Dg|lZ@Z$>hr6ClTqSW*YCvZh{LCq*7YTft}JhYhuM^)c; zUswnhZ?TgNl|@|a@`|S+h^+^~mo+44czcQ`HYGro6TBB~r-mBV2Q{ybsM~i8I*(2X z4!{k7hyNkmH@pg+8?yp81a9+}@XW%c68OtEtiay^*JvU<`<6fMJZ42IM!+-Womh`D zeo9}Ijaj*@7wlC!iE4Ncs+kf|}Ff)O_7PaE@hIjx$|P|f<-=P^Jc)`8x#ITKMGGn zX5}(mxvNH)or`T=Ci}}0)WrvQTYVyL4aF7crkDojedN@hW4I0xVmvIdMIW^u9gfBB>t}c z$7kW^Q?POg)EsQX_P%`r^=~*)3rd6WY-0{Y6>DH?h9&!Z=VwqozY+Du`=|K)i8*kp zYozlOIOu$P)iUI21@F&4$y>gYM@PH|g9Z|?2CkAoc&{CDuW;%TtR!LDve#X*to$3O zHlPLz)J)gLY7A%Kz(w1n9NP~IlD44gr;@5fU5PX9CO8l^aY=I@{U&hmdCuFY?Z{9L z>aDCG+-_ohY#(%uO;hX;BRhj)3|*hvfW1eE#Ca#F4?e^}reE%|_tW<9w#_E*n)b!$ z-k1hQt@_*9jDuoKoY+Iw0p8VlLhJ$eFoamT&5aNwx-&UWD^(oPrr6EMzjhPPV68BACB+p%_%13__Iw^t}J*Zd23eI?nCO(0PY4n zvWoD9>w7Q5f4E>}OM&h%{E~HMooIIB_9OU*9L!v}$e%rT5)?YUxrLli7%a=Ne1HD$ z7(}si`dS;!PbQldSqoYsOJ~wBev$4{PQ_SGKB`~DR`%k7734YP>-wMFQgr&rny8}S z?uJ=HPcA|e2CjU_v3#~|7bd?VYt4lFY%`}PVx%Zij6lU(=+Ias&U@i{`H5_KAJh;P zqUz?DU@rx8;4=TJD<#Ah8`__$o&5B3N8Domb-J9gZz?wZdLxFDI>qo+^T#KoEE2UI z{i2rDPYu(aZwYJl*4Nyru%rghRj3fR)s77p-T$qph_#{du_Hfr z>T+c8P_A@IeeWrdSf*af-ij|D-NMn^`yjCQ2MXNl-0w(92^OAn-?^i&@T~YSrMYeO z^*q4$_KI>7N8;Y_gyu&_`x88%575E7N zG_bzw58TL!@Il#IP`}K|rTKVc`ZF$&q2gCv4%&U>o<4sOWHvj@<7nM;1C}D60K|Rn zLUB9wTJRHpP(XB4TOe?MFT(5R{W*=p31H>&dH8Z%6$hnsDbL^_v+`?-2owatB5xAR z^OMKsBqodM37W7tN_tenL26L$P1TbY%y9o`}EZVD&wr&kv0;!z3>@)n!W zvFmkD2@>C4mK;t$i+k)Vy#GXz_t5JpD4{j|5H5Am3Nkn~gt{&q& z=0H?&b$as9^X#{=VW6sI5H)MTnZ1${%z>!l8^ce1j`@Nb4ysKiQ4MmhjK@AEI1p7# zf5*XOH#UNc0JkikxGU`n#^Psj@F1>uOHa2P)`x>ujC((UATiJ0X_L1QB(5}Dt~koS zULG+yWE8Q)R315Y9)YYQk%>|PWwOya2NNHb4;S{M*8EPOMu93-NYs4~bgHqS1P4yF zcN^95xRlYLCRY$up~AE+MoVxYs^-<^iy;*^?H=dtH@QaynpX_G{|Mf_UNrQ>5*{>w ze*{5l{RpAEqx{pZJ5#IsJRu zfgR)c9fA&xBpBAm3~Pl<7J+^M4{ajcutN@B8!;;vs9oAQ{^>d_bM$Dgq$kZ5ze1J% zgkY7j3wu~vCv`$k%49jgafi>vBd0h}lU@>a;LSFeaWDtu6c1eU4dLyM_f5u*Vpute z$OS4>IA~|vA(uF4xo4a-a!P<;oFF*2q4pU%S;!JqY&!pdcF`tO>akVpablQB{AC-sn%lwc0P zQ-Q|{c+sJieQ;@Dg>)M5AEw0L|H>NsS(ufRe&*f791`iEntUMY;rc8*VwnRTy&1rz ztq2dgd#gJ(e!|L0Oqx($%Rw_T?1~8zt7pLF1w|Zm)owsJVrL?Ttv$tl39QYK)0#H=LUc(PgA^Jbdx%0{f_ zUn)hy^%0@PznbnLP(B391i^n#w!xb*CX0Tl0C;f@1^Qlby%guj!b*X}S_`wY6mDP< z(lyIs2Tm5k+c}TC2dsFD=RMQl>S^J_yoaC`f%>JKsF?>oeZ_e?a3HFft6u2=wgsse z)F0JE?P^+z^*-jnsjhhO)|vC}zCcsxzGhJ9y69=*w3uMD}jFz@H1%{&vBj= ztiY>)7nu@YxlH9IbYKNu4gBRN!i^0~vAvC1aS>{OyE_xU)G-Z1BxdCb_np3gwP!`1}P9!0Um>_!7S6 zf(~$I1^x%Pnjhg|H;YYiBsi?V8-S+<5WeTT_6a=PUz4Q!wwij@^K=p#F*{>a&4McjHhVIB?WHVG8z0 zOb%4tB%;ch-#mlYC~yES58Ok*ucyxFj~~Xu3TXx4cIm{I-Q+BR|C7VYNw2uDmVMOn z98~!XqW-Qcz`e~JfGYye%^_S}p^u5A1hb-lQUdN;B;Y?(v9iakTwSc}{~(-;wqE-_ zdx7x+-bFR!{dhtUu82A`fGY!+swZ4$SF8rU%7qp9OW+{_ZsPdb8z;NN3S0&FTRAt@ z1H8LjWrY0S!{ zzFgvn8zf$V8uFH?g&jNY$A%m@Ktcn!hCbm{=i7h5)+SiF3Yq$|%Unpj1~oyT9;z7b zD=EPofNKJOWk3>vCpGa7fm!jme*?Vk9pQ$T)P`WD4J()3_rK_Ays3o#PkQ;he+cVQirMdAeeugel1$zmH`JmSk|JQ=j%ZEQx~neLko z;Cy#zaNdKa${&2~8NmGg(eBc+31XsI|AC zJ~t<7c-6lcPcaAJy1>H({A7dCO1#j66}TSoVgVoD<7W&$B!(5ZK5#=z(#aU4y#x#8 zumU##u4hB|lp({gM}=8|8v@sLCOp%o46AC)3j7`LcLMHq(Gx=lW(95p+{}ykgLZ7g zq>))sckh9F`4B#EPWU~{g<<82`p=r(4g`rcfBN{qHXO8b^6MbHh%tuXn`9E~v&;z7 zJ0?rLcdJ({;~yDa=G>bu&wau{u4+5@CE|nH$J4N~VuB!*ITS?N^7J0;+(0NkNMU{d z8HCBix2*MbuypdJDB?A*893a73tT)u--?6!)?E0DhHA=6S4x5Rn45b@O0e)meL1`N zxvO)#n1A`*CT!eTv@0`s$Cie8v5u3_r{9H=y= zaxG_y%+Wc-KjEiFXatg?=lte;RAqxYU^VL_6wB*KQKhP6EgqH7B}FNlmino?yifQ! zS*w5C_AhR?4K2tV{x2KIKWlX$MkY)JBNhwbW^(SV7d)B2I|cK3SSbauj{Dp#;77%# zbB3Ox=&jC?Z+q(5L(cQ;rMB(48akkG%^a0!iMUGg6!(MAihA5hh|W=a2Rrpa>YqTZ zR3Pe^1qz@t2jHK9n>;7{qhbU)4rWCgwgPUXN_g+67Z{Z?D<`d`qa@2gzM3zcIOxWZ z#uHS^R`pr-S$hqFSR;s@76sY%B@M4+SSZf@oZiJsa@Ut_S#Ye-9e#zQ?c0;eFWi-< zR91D)ZQIcXQC?Y4l*e11V^N&N;@l^6yV{K)v2RRTvX>u)oosLtUag1&=_%1-5Y zi-P(H1-{GgNY+!AYjvY#<~7&$}IN|01u@p=;$R3Qx91$eH2@0m6m z&ogGl<{DSvue>M)nKhMf&>z7{;j%urw6`>!VP7y%cLUeco49ul?ZToG^B`{R*Ov8X zW&4TzONRZHYQr#!aEH5#AGvR`>kfA&!c~lU4>x{e%7VPX<{V2?dsSP4#Ny9##XuB| z-2*|aqbbPVt6c*nC0Hnqd!)~Aex%s2HjOKen&XRYV&lF3I6&T*-@pNQh8Q~N_s z@Gp-iUQy%|w%lYc$K{nUImeBIrhc&(-hPQCy|!ybHkz3y3i>vN3VPeHEtW@EaXIfJ zWzy_094}C%5{cS5Px}!jlyKn6G4o;M7|uJX)RN6yz2RM(Lf)T#ren;{G&t{l%UtfF zk$qt~r4sd=`G}(&PsiXu z)bN&lNp3x^W}rR!fofk))YAAhhj1Jy9Js`W7RRe`(C0Zj^|;s%AMCN@ApO2S>(J!= z5kuoQ#mMme5rWfr5Q(GCkj>~vcR|^wmWQaRVpl2Dd;r{otH|B3rdL<=5fI_>sWElq zU%@@P?|1@xr32v|*hJo0`|{D2nFi;*yzpBW4)W`BraK2c&bX(=L55SuWDq2_EZO`( zXIz3HR}hV<=F|c_%@LgQj`2xfh3W|gHT4BiHFjRt#1YGIpt@)wK>SoGApOLDrrJ5P@_Pt zGbC!${8FqRFbATFRpEFvz?%J|IvU(66XMRlwEGE`!QjDh`>WABQIoEganShr4j$AVTfJ_Td-Xzto#`2aTvY8Tmxn4#ig7?0GUEKF?A8>9RbnpZ zAD`^Ov7}{fH3$-0c>f*e+&R_?7q4KBHO>7-2&LC*8|3NC0-=i#hhowJgM|l{sNd$u zpju9>=dk4?F`fH{V(B_ivAlO`H)6RPh2yB&UW@qIacF!5#% zT*9{+()s4oXZ{C2^l1t3_KqQMn@N=eB_)^!m(!ukdxf7ql!?ceD80YTJ`YQT`-eDk z-*NEh8hmg85zc*p|K=%NKGSlf*-r?Q;O&=4-s+`hm>x0>jykG#;6IoiCW9KCO4Ojd zb{M%a2fi__{BW0l(6&v}<_8|1cK^E;57ZPW%I1(_a_{#TJ2G7^b?>v?zi|0@hW@VN zp!(sq{+#2T>oa57PV`g+F_-mZPnRPzIn_a{3GLu1iNfSVY*Pc(mYTECVj7YOl&53{CB5{Nq?Aa~bYt_Z#Pou4 zH5aA#>_;m&XoF>mFia7H9Dee@)8)icIIU5fOpYS-_{EIl9OT>KDnAZf;2BiUv8vYo zBh5kIdfgUYvXnh-&i;~`(!Xfb=_sh`b1LXZi;>^3#)IN=-m$@hgdcUcny8N7+GQJi z0%pL!T#Ni~moLM%ET%&KVtH4{KHx_uZmWy`&r9D=npe5NZW+G(uEQ7U3I)V+T-98X z&y{xkqg>nI&@tRJnMh9hEhYCh{GvR@w@8sou5N0$JDT_}Q1d?$b#`qQ9&5~jqjo7U z+(MApAUhq-Jwi`voh-y?5@Kxg$W@e-V39bgziJITPdOV@V+%?r z_WUO7K4%U@6+geHRy&vK$Db7T$F;&N3LXlx9I>#$r$^7l(JlOY;uP%l|XD5*4IC_<)Gooi`#Kk(l~JME>uYY1YbFjV4JBs(5*39&U=#LVn&*i7}D5TcnF2G9QYoaxLgnaeT?^*CtsI*6Q(Xkg>2Mo~kv_ ze3wR=L(DhCVbcVZiQDRfLPt=&HqdQ`B3tqvSp#uNvdQ@dy5imE`YG{sXroQz34vx;w8EK7-N}hhlvOZ0?0i*8q3_ zdU79fcraEtnFu?C?Jo?LvR-T$@T~g53)BkCq#?F5?WTU4IVhw&;T;DRUN4HJgj)Rv zcB4-he&*%)HeFb#)ZNy6cmMv;hhM6Sl3nPJv>TD#&*zj~R3|@4yyrxYz?&GZNcb50 zzLhww5mr1_r2gO**CqV)a)SXl)(}=MPs^^$tq2m^cWU+oVgG~(*&MRn#<6O$Zm<`g z(uh&MPXIEPfp^q<^8Vb_3om(?25wea;8kXXJ5;Rc zhhH1RN)mo8y`aLS-g5{NFOACDd;CK6uExRa11UKO##oS`&!N}^Tye;fw>Ys_lOf0c zM=cNP^Up+;`jz)iQi3^f>3e+`_ZR6afU0Um)RSdz4DrDk9MC+U15dCg+)_f_5pMus z6`FEj$L8yNuiNNHBr9%cyQmfV85tmX+3B;x;GVXs$}LG^Mc>L0szLHNT89Du(BuI)j%#=YHH z_~k0Bz*T_jeIeXsPc&K;vm&G_@PtspBkoSeJ;|&Tvh2U+GRx!~X1jaTKvfPSs#%xN z!+4s)0gXu=_?KA1_YCf3j?dd*B?y}nS@fq8wf+j;nJMI5Qu`YdET%!V z-fG)SPj7=X&OQ9~QC+k-4Y)Vtl6y@%wWX30OoXFeD!L%7(ulW4Qm7{1I+~;{jZn(h z5Y)*d!TgS+T=3liWKl{@;D5^q-|*};zT#k3F3?yrsj~!$Us4L) z4%gxc184x(0v=gG_?CTV@z`Nj;M%}VeiJ^qX4h0K{KE=d2Y7J};elh9w8cSbumXPz zT%nfm4JVU&;H^5Wz;%Hq33%K2Hx3{!thnrYz$+VxKc?ppj2D=dE6sm>CXR=MKBzKM z-mG_B=Xnw9j?4iP2Ect~2%ngH<_12zgO!uG^{ep)Bn(0QE>F~XX=Zr4%p8Ef18%QC zc%LV4hG4e{tiX+c{}k}zIEhTGk->_P?}4i;6JNUc;b|Oi4J#LNQq=2TkT3?-_$5(u z_4=b-FbCi!z%vB=_Qi}Q9H#**UICi|*E1%52k9gGFfM?VnqiT6G)Yy+CP@k>c0aPW zqE!fzTGxEL%zs^HLY}RDEu;C!Pgr0Oo1mp$bQTgaLttGK3fwbfmjOQEMR>Hg55Sc^ z5uT%aZW~Uvft4bOJ*S6<9e-DKn6lyxYU(4r6`jdjOUL&lz6*s0S5vQ6z0N`)b5MP} zhpKinh-OqoKkI+zPmF2;uTJB^G#N1}kuD;2NQX?>)a@ z4t8k53fu;GMi}A8*LEF&R~fJZw*_7x;1UZqzQ+I=R#cQ7aFrP1d+VwHgHN1brK0*x zZoZ(V$|sj#c4QB#$v2`dj8^T5wJSK#g>E&wiLy3dgi3V)_tg*L&Rg1M3O>hy2Un?@ zQ>6JvVZo-0-;tCfynp^A?@1B<=l%C^mj~!Roj~H&Bi8h^jCpXuG5Ya{%rR+)BV7te6vmbvjs4Wgfu46cFERhj(Y3O93kR$I zVPYiSM#}%)XaCvpWZp&OeLp4f5gtO&0PY1`u9R?-?dLv8N-!(N=H9>qq`$CUt;6`0 z53tz^R;ssFZyRi9d>7VJ#9Qvv@%M&YQbuKQr%^Rups1)!iX-+xVoxWt zqQV1!zp^5{B4CO-9!#)OG%?pV#WNSNw_l)s_ay4hR3i+ym;*=sIq?5%%9{QDemKXn z3a-xKN+dC_Y9a?cc+%$z>LUnYJ^U!_iTLPX{7V7Bi7FoL`0U_KZO;4f?+YE-=PJQ) z4+|%E$B{em3}Yh16$`j=8nlRvBS>y*-_ zPyC=73U9px@?K}Fg9S9Efh|B`z!S0vKYCB{IYt(+a;niY^9E5{tyXV&IT&zs#4(O` zc}F~dyY~L^zprn_f=}}glfqas9C2MMDeiQSMVJ+_=$zo&mv=lkXoW#%eyiDOBMD6u zFam-vsz@-om+K__Bp0%1xskvt>j@9N>5qpRvvR7@+3%Kt8U<=rBT;V$4su6F3RQ`q>!Gnh-#Ci8`XCnNTOI@aACrjg#q!AoVFEor_+pIh09K*5P zhTmhWus;zu){Nrz%oyy0bKwvjcpPw>4}{M>5j_+mKUgvThzFkZnecy)?w^g%eqg1_ zXtg@4yx>12w1ot4b*+i3X=M2rYn1SyG{m~>m6h;}%WUNGE_KKt5#G^)caH(nHsLE{ zXy5`T0nhOu)pOkkPQWRvuyU$C{r&ranhdI@7g4>2-;2XG4LESozHdxmhd-x)`rMbO zvmUL%43If+)T8acz3Xg%H$LFn#S(YL4hOuDWFA}wZ8K_xcMqCoEp4P`=?5RGs#Zg_ z;m=is+rzfyOU2N{_d-7@HWH_%-a^HRQ0M4hzFf>L*Cw)emT5>YT}aROa>X%>R*@u% zm=4@BfzsC6l`;~a?!wARs1MOlfJ6qUx=BRcy(Sa`RptPROyK1ygxkt%;%hr*kB1>8lzuSlK88v9tx^7vvyys!Y-YO(N~ z%mr^OgXO_pyMo+TZi_-8mu=xn0 zTTMaYy4WAZXP5{@+??ah!>J?Rm5+1o-!wh15G1CudQq1sj+J>NS9sWqshs{d+k|5| zOPi?U8WbQCdm)p%OP}G9!1BRmF9hyTOBv=qs!^4cU{+3I=0MBOxLie`{*v)!{r^8| z`N^2t!hxg4e;%O2LDvfP+3AJF@K%%~Z~y*-hv6(yXmHe1jhDPYEde$3B~dpOFTl*7 zIdD{&U6=DP@G1p0Mwh5}?#>vEEp%|;sDlTn9OWSYryYdhnOJp~;%BE4OFUG5!t~|B zTRd?fdM{V{E4s=ugmu@au#)<{kRc0B_kXLE_g6BfccYz_gZuhDaVsRAI^$SScu*wq zot>K9b74`tRZlx}b?&bBAAXVIj8gQ{dj)b9i5;91Tb zh$^-tAJ?_Qdm9l-8~00SlVWAWtCtH?3lZw+hMs0=$4bPow51pd-*Y_iu^b{%$y?oG zC-SZdaYgr8rk?DhoGQ3G2=3n|yuhXlCIY+~c%UQ6{+gwzBq_nHz-xeOIuY(WH1!Mq z6ACM8r51RlfGasq4M2wnD_1KLH#@Nv%Q{dET}fhRC-(?R3FZL29(bA?;pdLbo`JzL zthly+fLC}Bu5ozKK|EPtr4qK9wsbg}po&|f0o-6O;C;r;FldD}W`q040&$eWgai=6&VpW)V za2a${Jmm?hR0Cv#iCSyF5p!$iKvZ!^S8&AZk&|@e77i z`tKx2=2~-CHeft!Co;!qPop}U$Zb>-LtYz0;c-hR2{tua0vvs9)5 z`~`6NBEn58)s~|P!U|j&xT}B%uAl6N^KW5A7B7LnEg}B28EbxGB^Oq%3|&5SU&=v? zBdg9qRR!L;g12tY>r`x-f(E8Gs=&3XNcGr`ct3Xb$ZMfH6>H|!1ruTJCPG6mS+wVB zKxgyw@#xFcAn4pkg3FJzmBTTBkR_`4&brujEk7UE=#`8mwG>#Er9L2b61ony2W;o{1SHi!fDT4n!3@ z_wlQ?J>(L&5%h>(nv?W!or#=YL$FSn1Wy;oZ@?~G$Ra0A;0l_ASMA(!9B7Swuy z>h0MJT|09Ct_xh*pCoF7?(M|#D6GKsfUAZO9uxZd68b7wf$Ia84JX_v;esRHCc}yw zzyNrB9O3UqMdjnSBd}5`Vkx7P-H&jPLZ1vN^v#CwE=(eC*^>j3@UbK`s9X5{x~0!M zbudi=8N35mJDIpkRMk}QnJ7Gf8v!>;C4A}bNf;3@EAaQg%QFbS8(I>JDKf0Uje+ar z6E5K&`4nR`SWyxa-~|-_sdyAKEAS7%BmWYf5FTHOtYHQI5qNeZ;Yn6E(s3L*tia8ITQm{wtN#~$ zEwci*0PZL2&u*C+Zd>rGidlhM0*{j;{9&IX7|Jm#n$9QS>dy%eE>y-E5VLZnjC(Y1 z9wa`4>Z3wb?_X(mFrk10a4X>N)d|;0_=pE8vqIV$_(v_m7tI=CfiGoYC24WQ7j1sx z1g^UcsAfh)E$x?p^%SXZT<0gC&7AwTYAp7jOkZh}6+cJwT3j2S=;L#V~u$j6qg2=q0AThsp_~I->gaYmd zyh^}z7W<;lWLA{RANaSo#P^8nyA?MOtXxvvrcGw26b67Qr%%)^ht{CGVGi8Y3^e`A zmNf%Gl{X}+{NnMy@p2jtz=MD*y(fI`ti9O(!K}c8fxj>z{GL&~4;HRq1s(#tM!*+k zcgm8KU{*FQ{|bZaCvup7@;csHGc)C4KdX7zwY(@Rn@ewkR)@75l=1#9KiWI=df5+- z)#0n}Zw^`<)8#zY21AialN)6+Gjsk4yn8@CL=~^i`KtOI)ZSY4G~W9!2Xl(?2Yd2M z~XZ zkDF3ndpVZp{0YJel6d<)a(T!8QW}l0-x4V7wzFF2(1##6=dCGYaFm16=AFC1LHnaHYC4rTqiBrx;19QW;1YT6( z|F`(z1-w=B$b0HIV;$_fg9cH>o1yVid=$2$={xw37HiaaUfT zuY{G$?(zHT9=KXbpnA#$vc7x7r9YqWu>u@8YKYs2K^#;PSHaKB-Y88Gx(D$BzFItZ zIXQ~Z*eJXGcyc8pY=tU?y=2=s5O0AIoO%-1l9n+`L73klT&WarRo)WUvTN-~90&>z zlGT{k+~iHd9%pcoGXC4I$hJtPvdVBI_dLyO*RVMaB3yBtEPmT@kbP>u|(~+pz~uq3*Z2WEZ~0eg!`*^MU!AwPU5NZ`U+69K}|~_YK*jMTTJiZ zz)}0?M{h^898g~-5>+)YAH!1S06Z7CLNeiN$1fTpDZ#90#CgDNGYG%5%uO19?1Gir zjJe~#%`G!l!*V3XNcrGql@NDB$~bK_Vt7y*;zdpG_k_RBoexhJIwg@cyWN!t3eswK zcI2J%(^vs5KoF}23esms@Br*2LMSfClU+Ns$i3Ba@O`E3bCF{q+`R?&j!EAaVSEP> zuBzUcRm5=6&W#m(&;8D{U^4}2_0DOumtHOI<{|_MkPc!U&ac`bm68%H6qlpP_90KW zAZA-NH{xm*!`oPayl)#vYGTn98l3m0o1qIpEn%g3LDbxc>eqND3;Ebbs|W-@>5LNsMql4UtIJVvn zs;)LsV|JF}mS+w`eX+8+We%@u$M((@?;i+n zxVah=A!g;IZ*~0K7mc6 zlsZ*=81kt@kUComVtU=V4G!i)D2{s8>c%Tv;(Ac^?TLD3j6^+VkZ|Cr1u~zWbI|J{ z9agaM{~x%Ad6Iif#GM5=NChIq6&DwMt1k&HM7&DU!H2r^xCjoA{TV@%1^Q#|r| zvlT(&`sV2I#t#U}Y5D%`bj$`}a4bTvidPGRN->p~iIMz%pnWRk#-t?{Yr@kY;VCRa z-k*o)p+{*%zDb#suf~ss=g{34&R_NHBEEW`C@u zLzWXfUaR)7^Mj63f3c~cf~eOkBd`F<9RBy0aVe*Pbo=8k;~o0vxzN>YwX)H!+kyEc zDqexboz@Q_NbER50*(mda*;K2Qrb$)8Kn_Avx-7LIo7o^4yr=}T$V4}NjY**!S?gQ z%Nec6mizOhW~$J!i*-By*KB?gbIxdo4Ehln#C30=xVjUb zd$Cyihm{L%({7O|sB)lM%M-Ov`v3_%py9w#hb(`~4waP$HC>6QC%qka;5i8gqKXyr z?@aj+P!&MUQX%SuNt+z8=NAq{)oN*xDjkAsFdBOf>N^dhe$WZNE-AqrIMsiq>CPa? z{C;yUK4#saeFTa1R9M`98$n`wzFm^cXXw|zDH9ngBCPIf3cGlCH5wKR&V^O(qj(gx ztORPz8>0S|j`fn1U=F}v0Qb-)+;IQXeb~(dD{y7tGJ1snyJj#7&#b^-0yi@t+c+> z>LXEyFJ;GcGY4w;<{F)vYw`YdztzZ09o&}!*XZ}fUwAnO4}^OKJko|V+)mq##=<GX-Dd@6OdU+ zTKp}b)sxIke6+-K`~xT{=Z7Z8T2V8ay>EDf7!9rzWBi5?jDcAs6iW-Zg%{zyw#gm9 zQF*YEgxHXadOJM9V@(^>tPrAZJz;SdCt<^Zi?(Ns#8nRZoG_vd63~ISR494Z+s#D1 zG7aEwfyadtuJJdkKTacn6^ZEr5B*NK#lypq=a@Bfa zIJXB@;6}i`e-ZwoL!Bvx1h4{s4?IJ_d)Am&;fLC=0yhS3lTG~k?A-y_+6F6%Y63i^ zityMF``f4jSh=FE?XkEETCypqm4Auq`!FA)BIZCXS;nwsiFrrWT()Fv2Ci=tai!~C zXX8}{Jb-@y9w!sRdc;9@&9Oa%S%H59ZYW3i^rlyM-@vR$&m4Gw8sSq%Z^W7wvvTP< z+Zc~P6R`j_;}uZ{sROnW3wNCfhEj+ixPH_1?_gfTPY|3h10~!bt2ME1`b1rZx-uh}0 zkAipS`U*&rPu>^iXhymJnb_^r?7Go&OdJI zL&5=6l}MuQd1Zq2IOYHeN8m4h5I(%tc@sW*gO!t*8bpigPN1d=RF(VnYtb9S0n*OE ztCC3~q|OSr46_1v0j``uxO9ar=C8~O+!Z)ZgJErcmDDCYubCCN8}QIl!Z*!WlZp?Y zVFm6E{6_`hyWbZ2po@SNse1tT`b~I)mti;TLxh!57pvLEeeMZJc!HWx7k)c#!;M2{mwc_m;bQ(=kc@DL>%l%ClU(>2H*}h2Y)@ z;-^4CbVlgmbtnr3{0qYs3GeJA@fWW|UC7ua9`kGUl8tOGB^c8 zB3Oa@0k3>X_~n_m_u?~pSh4)z58P3oaE}vRyzz<&RxU-o*%ykbaINMLTTE9fqk042 z-t>{&dpx+3kJm5|A@|yreFSm+H~&EffuPnn5cN*oL{;p@g##plfUCO_-v3k&bneW` zWiZmq^8h4*L6vhOYKT_s70i&~06c_cA>b1mmg1c~vqJhS@B$y=M|A9LfDid#C28^E zN0jAdvo|N8DkKwiRpC%bGY2Ykx=YLWHaczTesUKFX+0h#3iA+AapV3a{Jb~Ravi_c zc40@tNTeRdQWxT?pZtg}i$w<>4&1ni@=3c>Uxp)YUS|tH2g5HWuE`Ey+7*WPT35Rf7gysaA_?u5%B_aEeL2!k(Z_e22ToCvp$j`U8C& z6Cr9|%LIGjW92a@{SQ#1J`=T5zvPc-R&apCPnLlV;X8_*FkEC-k`Nm~lS3zG6g3W1 zJ4d1_j4H*-0(0OJ8#!gjH_lt3_-ZEviidZg6M65{2*d-PX>i`D*N@2|Py(oW9z^{X z+Xky0%z>kB*Usz0L4j-J4G<_1-l<>7d%8g=cFHpij+(M%i7F~3i3N%zs+y5$1O^vy z0GoU;6Fe~sB;2+`$U;b;sR7@yfMZ&4T^V10LU{sH#K4ztmVkNFnv=YY9 zSuO8TBk%bxM8awC4$3C)2cbD#@tB4N=j|9-G#u1)P}2pf`i|OYe5eNpu55j+&siha z3{Z>nNwsr`Kh7Fq4(J>*fd^I)o~+kH4V^8lBq4SLTi%ED;1U>?J#-ZpsHxlH)znt& z&0C%mLk?$IbF{$wn_VzQ_=UJXt0=DO&?iUn;SHj5)HM?Wn>c7(*g$?oV8`HhwkTj0 z1m9GX;H@op^|2}rSp>>vf$9l&G*Wtn&thRERqX_{J(y83D@lku6yt{MsN(_+oqX{g2VHeP${s*@5Y%iU z!IOKtp+roUqc&teX+%!>pe6`Z<;XHT>X-xY0^sISVXQNoqq!1YKeIx*5O}gY;f2$z zrsMY@u#&XcCsk-Jm<5R9Zy{lhz6w?}{u1DR8ib#V z(mRh$Be0Tma?27!^ypxIDZy7wFA9m3!rSf*dAE7<4tp_~2A5d7*?w%1r3}A24!fR+9L(zIlHAG=2yFipR4DB> zI_e6VXkByP9Cw1q{Y#_##7rST8yVk^9+78R#k3}lBp{)T&_ExG@i5P)Y76QLBv zm%X*UZt&jEk1gK@?@D;5dXo3tYrD}OG7YYd#!COYgoEB392imn+uEm~hO0qM5vXpJiWt~32jDfp<$Xw^Tlh;XKQJrsTHq!E{ylU-H$41cMaVkf zo&tWb=*&|*YGLI<`j~yb3Ti#5Z-Pkr>ifQEJl4q7v^UmaWZZbA_MYzndB$zz-56K77~6STnfDwv!W%)0aq_4JTa;Ob8=?oqFH*W3uAvVn!%ZS ze8c}f@v|BN$wM$(5RAHIS|cgJWO3Uo057hiKpLG7%)v%bSSgTLf4giIgzsC7^jikk zm)7r%h3s>U2@OPSnGNGl{)4)Eff)L_6l3|nk{Ir?NEAbS!Q*_?b~RVZ zwxiX9Imp~Wy{26t!#}>+fE&>tjVF z#dev?xSl94ZWI;Z`8I@iH`(Nb4g*$BVv)Q*Tjx>*RmPU6QkSpcA;uioDlzaBd%``B zS@{muF^7gaxXKR1E%z{Kl$2l|oqgMOd<8?f3mNVQDPY-znJEvk z8SLJ?>k&cXeGxfYP8hU_OEVU8AAIEsP+`4*ul2tP`~Txu1M>=m)+An=?Ne9rP3MKv zwPT#4ma}YM+yWXXf}JN7!R$Z%cx(qlL5M0Q_ilrMHs?KTLSxYBeB~94qO%&Y_wm6^u5#n_|fONm_y(-r7Nfyj@Q= zk7N$s59RL%m&-@_7&h_}eD@o)*Z2=0&1RI@UMcwHEug@oZ(>Z^1)y&FO zNcq@VpCF+RszMP_FInpE!Lk<|AYlO9ql9qT<^Ny+!>lCXzP7m}4_ueB&j$=aRVpQ_ zgUv?_)tLh%-U0V3C;Y>V@Hi}c!OCT^Ugy|1TtOpHHL8fJT7C5~-bcZKqt421>(4T}f?Ye7gV#qKeIS@V@Cyc;Rafs@)r+&O6z45I(|y z1C_)lYE1JLs(${om(ZrZw`;~$S~>GK@=nw7|2vZTb<4}Kt{rih0^7-+{;_wn>jw2L z>@|Z0Lc0l}^Sj;*#Bn`H0JtS^led&o>SfifSha^0SN9We7bC(qIn}30N-!&TeZEwm z;CEf_K5pcOI{6ImLJRWt=r_OyEfgAD^;KOe{)hyuKvlFR>c0c+|G{D+9DrK`SFt1f zxkeGz>X{X|4R9Z4!ae1J@aSh&By0=(r5oW32e!SBz8+RCCSi2M(BPDBFsphkrg)!F^p8+-@?2jC9COCt%7Iu`d(Qi555 zI|A2_A$<0wxQ!SZ!3x|7c=0#FkEK2YpIL!B1JC|W_~P|OKk(HWtSF!haH%xH|8z2W ziI=*tas}KL@4`PW)Fwx<`K~Lxzh{$oH~V^BoVf=L;BLS(1pIQyDqJaM1?~=9DTnxZ z)AKNoV^-XZ9>4=i3D+6rj!_Y_3T-a2IrU66>(FxIV4~i8y;N76BlV6 zLpU!`b8CpY_qI9~ZJ7gbZ{VM52_JuX-fx_H0W0t?zzymMkKB3>G=S6Xe4~) zeMu7>9{?+**XodG7mFCS;m{Y{v?k&z4b{h>nR#&OWlhy90o4!G2Bk>Wt?2gIwgKP& z!hxecJm@No%=|&EeL+<7T60ef(cu6*0C>u4!W%kF!ult(0uKcKO^fha)60GE0s>YH zKZAg~nGybM-`p~Mk_Ib<6d!SiL;5Z!NbEBMZp7(viOIYgz}Dn~AsF?M1V3au;>s~u zJWE4>|F$N)X~fl9^y9E{s)h5y`3twfXm27HXuuy!{zXUo+;1y6R%U>5G}8Hsu$eX# zwqJ}NdTJIN%{-K)<3PBh+^&6Cm4=m*c(tRQ69=W6s@{cn7`**G$a~n2onNs81r4H# zI}?gJEfSWR#9qMg&Slox!r}eZle{Cc_h5j|G=N6{|0UovLI#K8JprtU770A_3-Nau z-gL+3X0URJUC`g6!9gygE7&f6%uRQWx^{iWZcw8^E%PI4Z}mIv zv7QPCj@m0N@E_a(F`)kSC+dMI0jL4yKzBe$Ld#E!j!#x+J1@V1s~thyRo2eEFg=6^ zCtFl*RgNl%1ywPMsO3j5YhuU;2S|JeZWKefuWj*UjHF>D39(If@=>*d#1BwYQJUU*_KE0=Yx z)ThlH^h&RqZ6Qs7_nR{EUa);MyqN}TEo5VFjKH+^~l5y?GwEmduI^mjXQaZ4~QcqCQs*LsthYT{wN+ zmY%irvL$Sh@P2`rk-)#8N4!<$**EITwXT8FS#M4d&-(AX*uy zl>+tmjZidp<^a4L_?KXk=+;`BzsC`XsBy&tbNO3~JA@W*_io+Xnw2 ztYssGJ#cXsX3s1*7j~fI4u33!G=Ta-Hk$RD2MdOrz(WiU9CgZo2EO+`(8={37yI-B z&0G!&b9LN@HuV=V6y+(#K%>2ww6jPYby?5r!Uk)xQ#>9vQCN}@q4lS3uzfp?5Y!R` zw|Q^xj!jgMMW80&*_ssSoQoF5q|C|%`aEy{UV_A?pB~@q13_ZTvo?PqhYne)2_uKM zBsjEF7bUzlf-EPP{LyzK^%jm_S{^iQ=Z`4mXf|J7j^>~)KlQibi7bsEt|k=3(Xh=S zNeLE;%g0f+XdUNmAZw?E6lLK3){4AmZf3{uG7XL@IbBltM!VGm!hS-kuyiZduC94^ zegyyT<7gdJxGaJs3PCK#N4~)aN(hCnQx3SFH3jb^pKuNzox#d?oy&s$V?Pd;2e;0K zxIz1K@i1W?T%!Nwg=^wEDuDXJgQ)+_H=ltG2XNqOYxOcuBz3-pBob@6MDAsn*;R|5XYm++tSr?$g?1!2WP{R`l=L4-HS z*~m#sFe{a})mxK3@(+ccLp&As`tq+ikX43zOc=S_f0>E>W6fq-ZGoE1oLn>5LMiCQzxUnkRY*G&+_iDakK`!eFg6h&*v_{OLu4> zf!DwdvPtz=kFZqiZGe@N*uJszHEc}K1U0LWsAGx(Vz58}2cn7%$x3>CZ>oMH^_IgI zI;~RRKi0ak?x!6Wil3B>PQPz%POMI z%AF8^^FQD~RI!dcU6zd@NZetnnd^HIb)*gNM#0-C@j4#3Oanc=4sd(97}nFDFue2) z;|^F!LM*thy%)b~8q}+MK9^?Wu`<3h+M<7xonG)3F`R@LAp_by!ER(kLIc+YUi_M3 zJLmOBY-S}@!Js1npYaJJ9Ed6ovsAY!3M=X2 zZO}EeQbK5$jh&nGEVk<)c#5BI(Pe zGQ>4Hks#}qBh$~0vS#06zDJCBUy6|?^Ron75fO<}EE9irr&jRjJh_W0zU{Dr?V>S; zdt?~74_J|d9ga+dsA4NP^Z2~5uT4DKS}W9AXe*-N{=EJ&xOYq-m=#Wf`Zu0o-pFLR z*dO($2(Ro!?<(h@L-00b-Vx;8Y1jWF>&)Xq%HBV2X)u{&aht@4xTo^E~G{=iYnn zx#ygF?=GJ7R1EPp|2#CM*~mC8V2-oDCFkURyxnhzw_olIH|}u6fV;yZ3?Ad&kUO8U za=v)LZ-k5f;^ebTXe+CPHm}H$Q!70ru>(lY-W2Jpvf zdWtQrd=PK@Xz^ZdHDDs&qaub@hvlul4$#VO->x30r_6bh=@h2^z1J1t}r6^BAdc;e} zX0wm1VX=z9w8#;-^%LQPwvAzEt*lyzy`T0m#(HLpwCEb6_GEbBea7$(7#h8urxIdt z$#}!PGbCzssYn*qlvQh%mRYO+)e4%v?~XpWoBEUEQcX3WZ}J)r`%%hx|5D1hJSq1W zg9u8}q>ruZ4J6HDNZsCxbff!HUwRZA;6Cup`N9u+?CsC`4_3xwzVNFnB2^z>b#4;- zBa~Iz`e-P4zUq?RWr_JvWb=k;GLnAWCn z_(^!2qomW)r)(zg7-6MGr{DoD!oNH9h`WrkYH5Duwn_bv%^&H#ogy9V*tRQOBMu@p zbM6QaOR%g(I10e$8Iqt&qR({PzrL0TQa4|bw)uVV8%qo2 z06zy0GWe9_{au(`#R?CGZ#yaaM^1I-@I-@^BG1EjhYGLxeffoa^$x368=|hZTC+l9_N$;w}KG(gPX$V&8_$s0}rec!mG{4n^k+?BJpxQ78=-|yk{o?u{e%FH)ehI$ruJF9&YonQN#tILEN5lz_&YCuc#>NW2 z3}1dv_~V8z-gDVurRG=QAL4~SI?#v~R95Xcp1oX8O=ew18u~z_Gv7CvN+aO_zXp#@ z5`JvY?cSCa%1Y?#@C(m{2mJgCV@+k%8nt2lyXOgULuK(wq|HAo6Gz8`13Vm__*(e% z=OeuM9S~N!^a%LIeBldU&#%l16ILzstCAI$2{OkNOLsoj7dQqlo~+(_yh*?yBjEQA zf!xSdSPF`SXReP@T}rJ|PN(_cHCC;8DiyzDJUE&c&$AathG^;3du3OGf}#j`#a05^ zor&Xks<50sx8SR`2(MPWKF?^%s)dLz|JwM}U!ljX?zPs`B-!>u*Wrg2`#~m~DpGFVmKwyQ( z!X12tPbhl1HhQewpW@&T&Iot8-;s%JWtHlfdojQAxnpdmGw)Bn6L*dv>OH*OFNk;G zDfJac6$5@B9&PZikB#T0XJv)Q!{e@q-Xm=O1g6We!XLob-w?i|N<>5c#EKRE5PtZM z@Qg>pslBqoAHnb37yfx-on?F=4=ZPK0^H?|aO?QL*)*Z7QX6w%xRW_qooe!nSUp{hT1dnl!(#$Bx1!= z_KYM{T$&*j9(6#t&F0&zFe$4RqDH_VwWT%m z*K1?VIialZEV%7y;bjKbW&okAq@4}l79xC6NA=?eWz}l<;NG_{2=N?gVyH+fbsV$E z(n2}FU%<033eR}@U=qu4SPA_SZgW}q`|;;Da(ZIbT4ZUv0WV4)D_ZIm+B4Cj{i=28 z&AhIShjCiu7wn~O*ZZ?7;%{y>J=vqTG5cm-l$kDV>T4Cqe3xh39?b(E^~v2tO_j8G zS(<(pm6}qcqp(5`NXI&?Q+-JeDc_8hlI}O%v1+XsRxG)ymR&RFkZBs)RVr7Vjmwv}sPOu=1Z;S-_EFv%CM5rCT)k1d}KT5xe4LH%GgqCLSB?F=~$1?3Fe5#?j zeOnc$-YY3K*;b0JJ9z`o?Jk3XRiwct;YDGG( zuDyrmUqyCS`y{(fwfAuwR5@}g+Q5VN3;#aYY6XuJShajo`_s2IEwviyUJsG}=(VXS zBM=-k>HTUk-rRK8Ak94{((r1VyEAc#gO*sQzylwo%+wsQ%jPz9u zI?;7-=OE#qwFyY!+viy25-#)stdJ>F)z1Rfqje1yZDydwHz19= zAkvdha=zv};5cZ>x;g!~hUp?(q^GWmbkEANbNPoS4w6Bk8U43KdOsC+b4oD&thbF; z_&;gU8$veSG!q z478P%WH-at-WA@fY0pY*e#5F|@nKoXxsrdOfm|`?vijZ!_dE4|(LDc}`uHV{XHOx1 zu~Nv<*i+ej*N~z_YF;#PRU_5CaSKxaM0syOOSqR=wDq%iWuEuf;)&`nbeCWA}miMXj*W+l`ht8>P*; zNn@$J69LazOTcfpPqgM!_=MF0zVGF+NlRzI;HE{$+!^nCYsI^DaNV73_#=iUjjZt8 zhl^(i(nIS-+GC*l(yMaN?|+pNT;pj|7qt5~i1zni?U%Am1`mqc2~V>X{$NxId)}bI zswG<_s>&xwU6Fd(i?nn^cb;#RgC_mK+4lpb?LxYBi%1*Zn!kou6mcNLZn(!*;Un7S z*>T6fDj`mM`|&yU-Z!1>nJ(Icbj1#l_7CmnZfT($w9=-%JW@oEIi8q3Z(uPE*;&-m zpYTuhsvkz0dnx0Yi(cKLrwUfB zw0z$d-*6J_N1C-yq$x+DcqCR1nzU8Z_%<49e)`uYc)R1B?e8V|Ao(Yr{ zeh9wL;1AdCWNA`aX@PM^l_$0 z&z_9uc|vRl{(Siz)&KYT`h5(4xxgwRwoUrjC;hi-gfWq7b~MK- zwCgDG=a9t?#>y^Flem!{Am2g;&jtU=*vYguVrgN!UT zj4N+xp&Z~h;QI}JD7AbJMPh}A!*>|`ZPl|O>=D5VkASZYmN+lA`oy!R9xMDN+~I=o z@o$f&v)c_V}(b-A72z+;rRyi$_l>)Uv)|NkQ+m}H!CarHrzK- zc;ug5{^iLQE1gd?JTO-H?Cs5Y_*PbF0`t5Za;f>B8v5tPruQ zgP#ijbN29oY^%pgMef1Zr3ts1|9r5eg|bSKX2ibskb5RQ12!WJjwx{0RLbUqx!-BW(92HEpx1dehg2s7yfFla{|vI zShcJzYaLY+0*Of97}7x=WmwQx4)7=N@NE*p(sghxmISfFli)s%!i%J?WP(>&;mPo$ z+l2=tG#JTu0F{_j;Uyog;ORhF;TdqhQ^JE|>++DKtng>> z&|u;H8dtBzBm`Dc&xG%}E__wDF=s6;lvPXp&nig^36X`=?v6-XciO?jlX8G(!>`^G zUZlbRZVJi@e-1yHApFx^?IUR|tne4`Q%{6{HSgO#teInlzl5iz2u}(s%Q>X1@K^8~ zS;FH=PhY_~gcY6xk1_c5ef2pPm6a;JhVRP}eXHaD(6K42c4Bz^T31a*zCr5$TBMzO zf6Y0k9N@Wdn_S^Hi=Fjg%Mw<`f_ZSO55k*YxXtr}vg!}D3%{!vMU1yfYj;7p7@b&QR2ESOZ)Sql}zzW|0 zzZWL@uShX7VbF#>$CXPst*u<&}XRO^qOFqSigVdzZ z-aNOz*7{T2cC;JUi1xoFxjgbI54aQj_FCbkY@VHX@FV=B8Z;_{K#7-fHMYf2+dM4m;sb zb_=hx_1PUhV1iW&x;60QCB0zUN!9hcB8}K9(#ExFS7k*62X6Me;JJr{ADB~`QH!!_ zP5I3i<@9}u(P?j0x3nAYZHL9X+r=m@2^9mr2OjPvd{dWJbZyE?%j|`_9~a)Depent zlvQh)xKAS53NlBIOM@N%)>K2<{M z`>X`!FA~7m6cQuz@MEF z{`}EDFF6=kC6$!P9}mXAd56?}`ykR)XGL0Vvg|d;R`fP&6Ur)~%`19q|2JxY?um3wgh<=i=6B#dCLCBDKLX!-)8Ow?sJ*hvbr7_< zVB+CM<*u1p<9TE?>B)if!u@TexOYhVj6r)Ff{4`oxybRSV~th(H3k108C2{+q?Tuq zvfI`4jW+>r-I0LxCi-sT7DHJ0QTWAJ;f*HjW?EEP;m6=NJPpUN6#HpU_!u-9~48{m6-e!OCew6hoL5GaR>^@&uL^?Sb ztBR)Tmzc~Wn&a$Zi(ZsoSG3eA3OQ>OQY`g@KOcsmC{4Sp_+#VY*^FrWU;b`DMw)wrfgLWY zseu5r4m(6!|8+C&dCEi6o@%n_goZMY&aR}PPh(zM2{O;0VQC&M1ewRAmfza5nqye$ z|9Wwj1(Hdki)4~*`y1D`%7@wn!2{fc_xrMG1zy#}s)e}H&#e(5P9wcOD&%rMQ39mKbbrubXl|DZho^@4t>)ST% z*g=C;Qn~i)$MZ13;j5!sod=ZM?_YWc(=fPago}IGL1&jUL??(=lV4l@R7yj0Px|Bt zGW+%ZPLGTp!)(}}&JX%ab6jp^YwV#l&$sSrlje)cbaeb+*O6wvKyp`ZN^(;!w|vC+ zh)GeT=JEV?XsQ~zh9G?rFVa)zgHw65#(^P2DE#$f;XaACX-;L8bF|Q6*=M~DsVAh1 zXm2EnHlyE52j)HS;Of5w_joG&-zsWtPFb~#-!+(*Ey&zEko;3SeLKSO`7yp+{b2-L z@md1T_UpHW&Wo_(ZMMp-krRzm*KC!4T6(2x#rE@xs3OQb4r3N3s1EWnWt=t2NE+IR zi%6A3n_hvx$&<1ttS`X6K0Q zRDZUv$*jeECKw0!b@)pM;W<(D$1rZh$`+d&@RY5>Tc7{jmBAoZIV^?t0@i7J)L7Os zTP1dnh0*Vt=vm6vD%=ypiMYX4BEHYx&J&S}t4C~Gb)3QLOI2!w= z%yhPd_#0E6W(9i=o2oYdMN;gZgHmk2Z!a*kQH8U@8U^?97k*`YU~f7YtXe_eT&-M3 zLrKNk8y}l+a4vWVNGaaOIIqpZkC%>9k3Y94WN&~JQqN~ILk3k8&2}3eA1J)U57pqx zDkWJJ{OE1>n~a`>h(;Q8TBPlr`Z52Y9N>50mkmC##3ddUl@%TX-xMtR$YG!G1f{GL zc^94=Dtu+~QU<@uDn**Fk3?>L97u>*r1lp@+OkbJQzXiPJ~Iv;6)8M8XCNb8Wt9+S z#rviItuM>1u6juAEWU^L+bHp#lNR_T6DGvaTKDgZS@n_LM|v_=q(Q@MB3W3)L6fFF za8%pe;*t8si8R*g?lTtFaezO7$2<@owx>87v6L155FU{zJmP${-*}M33V#I8ej@yr z&8a-YD=Voaz`fIjH{DbwS$%^%b);5jt4Cj4BgA8*hn|VFQOQMAP&vR8;pei2k8AO3 zcZO|PY0f9`r!R${{Hq(ytgI5+?3M0j&e^S%wj#X0J&7gZz2mKTznf_BknIe_Fr=M7 zUOVI7SbLH{GE&#&_f;?R&#TNLEGFPUC!YepU?n^&B5OYHonVz~KgX_MJiKwFjrv;B zQ?&bch<4J|l5O}z0v=js-Ah&9M7>gx#<_~Lp>3H}JZ|EkN%u7xRYOBd56?M3vT1nl z+9%$9PP+Wc$}utE>F_{LBZ0hfe=x|!N@5xCh$F%e{r2rpO2aCl&5>(2ugz--@eJuB zZ;_rUQg#Wm=s3VL;d_n>&%Zf^DLZ8)bQV1Ml<>*<10S%Wh*it_K+-|=*@JAP2hWLg z$TWMhP!6=kbNK1Y!rfBuGm)vRT8QY~SBwoN=H2<)v^mjuzrfq^s(7dE{M45pL=i*t zu3q#fqvtTM!AG;6-s14S#QW$C@gDQ-uiN=NB{Agi7TPefuljto-t-Esb%bbd+ihaR zraa&|@N))t>)-Z}rG>J>U&Fm`iN2>}2v6h6%A0|2;0Ke1FLIs0DW$BEvDsHoDpk=K z@z@n?X+Jf6U#MhOcytl+vWr&N4f_VU2{Jd#?hg6md-BPp+-GT0Zn+lj94b{hJP*F( zrSPA3o+`yG30C-9mH%tuP7|heQgU|@yYz;_-IZsQ$J zAF8aRw;H~|Pk2hZOFWM&tCrr^&PRP1B&OAS5xzWhaodF%1czbf97 zH{WLhK*i7x(z6|J^+DOHcJqz3AeVwyhMNxjeg=nN0}fIBCZr}o*{wH zUZ??+Ez%R=A}v`hbOY1uI1pkZ{FTA~n>&j6EM?X5A69wqR6=Y*dL&9he9_p(UsksiM< z((iuHVAe@FXqEFiQB_6Vg7ozRk)H2HzgrHmT~n~ydyKj+i`UaD`6^zRJG9muLm?*WufKSVCG&muf0tb{!H9k zSv;-7c1eQ39pQml!fhY8PhouptNIr4b_`EfK2RN$!;-sQ3!MDo(2z~Jl!f-2SvkQ$%b>!_(e)|K1?g2oYB!?+^S{c0!?zRu z$VEc5SvH0xM`hJY+puI+e=Taw0kzL@1-jyWbB}nJ@Ltcffr_DdyL_DyB~4K1*~{z0 zLw!V?J*IDEsgt4xCea;Kx0M z`#iDf&!P-g$>2s#!R7Pr%ij9rZ?r{rqM9Jut15L?{J;2e5?g~*6s=O5`g`=ykaNGz z#?8b$$-nho*XR2;xR!rpJ>?4z`bCQYU@h$J^2*^kC4tCDD zW}vnod;Wj6TXdzjcEkH(n0S9P;r@6o4q|9Yx65@))&hE#>UT*)>u(=+;jXivfRArT zz-6iH>1$M2k(%9q@Ye&1Yh~Cb4lo8XX8nBj*fiJ5c>9%CD-Bi7>!jXHb*I?l5mM~V zv#pNu9sq@_j{|#P$h<3tCpFj1Po&fh`9F3e{HFt#VXz~Qa{ng zOy6ycDosbrt@G5V_#k!Im?m{t;g-(@qiO;_1m9xtvCfTnxKvj7VR)j!zx`#O1&e1` z;hymQFC>m%Y4zoNWrZJs2fr5H|1;G_%F2cA1>gH#`0f|6Z`rPjRT?VAeC=k|rt00a z%DE5CnMGJ{+;@Bs_YIK?L)c(R5W1kFsyKu1c6`ZTURkveF)`Z`xx|hkU9sk&x}Cfq z^EJJda?p;!<)Hz-nzz$0q2&dchowcy`$JUc<3mITTZvfo;g9*u6cJan=3xGtW^Wp6 z5rgvYwARq#$3INe&~LS(^cOMyn!GSrQ`PjYkjyB=mrO$JC6mL!S*2NfCLd{CyH#aA zb~W|)wO0$f$I-evh_>f1w^{nL!Y50c2!fUl@xs0a|tnf2%2ZML`{OCHS*s(J6b{3xJE&ANrH<)5oR!PPD zNc8nBBaNZDTfdJ-pP4CCn5OTF2AjzXM$q!5Q6r&VMNG)1X_QZR=6 zvtoE&)_EYK6U-9#-r<5tk0M{){a!LMpE{D#rWl9FY%j0K#(`QBewNVbwjlFBI(`0Q zw1z&^d#ipma-LKU2TLl0zk8R-5-162(nG!5H`7r4YSYw4qYHR%y=YWqN{e1B*%3pe zW`>u`4PQ-*haf$5Rir^@<_)4C9Hh>Po&^JkHRoPkZN+Bn%OCi3E#xO&qiV~?g5p#9IePe8Crr2uaPGk1NY_WAdqq}Qm_^(;5KJ#^v zGQuOIjOLEz`}1*dO46j8J74K6$o$^pXALd7b52~s`>EmWF*PfNCmUkWl40<-krLI? z=?YPmRf`%Dk`+LR%Scmii8S}$&#!aY;Q+q^&$=so{L+;R(tGk zlH9p`NpAQ4$}?zGQq;T$EOGonLmS)7P&1a1c>8@2?{^QQFK}-qhDgoH{}VBnR&pDT zLi%piBXt|D`_tn3JVoLlQZw_~yMMD6WPaMm;)`#+wX)mVdAf2w-cn`TNWkLJe;?sR zN5YcRZTMve;hqbpusEZvT0zCUQ`EvkG}1gn8t&v>#nM7KsFx`3V7TifF&0@=`He${ zSm<)J3;~<)XCn{zi{y)^~XKMVqCi3Vq^dW$l`&S~Ara-#VwE4!;jpokT3T zc=$*zb+bLo@g@)%Y0};e96U4>zLhT`G%Xc}_x_XOo$zO$#+((z(4@Uzg?-@Y-%|zo zi!^ooI<8CQz>xJmJS;$Xk(CYK@f}~RQl&zlbiA9HYMfN&0c+p*Qdh#p<8B`)?h98o zr;}4b)b08K2A}g{82jH11{caKshO=e>rsQcTDE=S$2tl!U+5|R{6IC$G0<;%C%v00 z@=xQpn(VI`6+LO=hos_vK~lMXwT1_ydlJ&54G&uzU6PsIE_XgdS zW_toZ_(-_>@FkzKlO3z%YW88rvg_RuWWHnL_mg#5q9) zittWPQke=@RtaH#0%`R4+<&yF!}>lc%OgMv-dmoDcmATSVE*B4R|Heal_7V8&wYQ zbolOE;fpfhur&^3R(@=Eoha5fR2Z(2U$HwK8SB`E1cnyDfP`K@p(=4ngtJV(LJ2K`WeS`G4r${d}NpfQX76(mQef5DXq`4}p zAuV$5Ks+1FaM0Rf%lSO@-gO?*D@P@2)#|I53RDj8xA2`l!jnpbj^s5atnhd6%f7-_ z{NY0dm6amj!;hX4zH&tlXP~lb*+t&WwI)QqDl$-{pVa7ffYpB-2=M`Kbw+r(n!knf z`W#j*>*QapI}u{}N;>UxB8~aAL=#rsa3I7Ac=~za6-FHAkwsaxEIQU)^Ncgl3hCK! zk+yx>fhLUTol4T6l3r+EtA>VM#(7V+1-N!2(5R}yh|vP7&J^}}|q6yl21 z?1vhTE@8|L9c}!vvu(3vt$d{y?`J9E-DTf!CWKWC$*0il@0jeVi>Ur8v@6p@JFlL_ zE&eu&2SX4W`1K6o4(*-0@^vn(S_`&1)xD`8b9g>*z;XS-EVy6KZB%JB0e#*|z`t{6 zFq%_gwSWyTSR2DbvyJRWK2e*G)~Iw0@1bmEqN*VCsVQpVR|kn| zhj-w9@wWP>#D3m_A_jaj{IrMg0g3Pwv@4SS^J6~rSP+6r33hf(x)5^Lj zF}9#xdt9^~+72AZ-4qYF13dGj@QWS4F3+S2R`^!->LWrAArd&T#KA;m^j$ zY-0x-Ru0Y%c+4H)+d>1T@c%umTFXB8?v@Jeg4FS@NQb5TRo2o%IlyrOeCq7yJGGjSB}a) zw2uvKjk04#^Rat8w341|ySA4p0XL*c>l4*=T=A=M%-$&n32VQiVE!zn;lZxL3hk21 z`1{U43Aw!BuiE#IO*RH-Ci?C00~f8}b-72>R+Rk|{Mud$cBne86*Hj}PwwvU)!T(% z8xzaYwz5iy^9Ap8ZHQWZjSwD4L!3m~U{O9jo^pU6fIl+$>evHZfXWI#2;Z|y^rI@| z#WJ_Y+ucfX^na>VeWz|1~>6jaL;hzzCodOjODRP2y+;5^0U^XwWxN<|6SHlkER3ZD$}bf59VG2;hDFEUuyoc zDT7a}Qk>a}9cn#pr)3b6dwhk4?#~M{1{>zN=)ZNnx`78##-V5_<4VeC?rN$e_-Xi! zyTXI~P6sdzf)#!SzC2d=kXxnpFdvMSBYqZs`o8cU;}WCT5{FgGVtPHdZ8Xg}q#h4M z+VuB(ulSY?4$?G*UR;|xKUY0|2BUprXcu&en#1l(JSgrwJTXaPoEW~=gC7rJ)r#vm zakVuk%mt)J(?yzabIv#}2^>UfwqnO0ep{oVeRaalQcwuqp3lU4)s6+LnHeF5CY?6R zDi~=fQlBi5K3NmP%~v^SIn@dYb0DXSNS{3yscmk`E|yVo(4-xi8hIDg|NM9`di6;c*0KW`(HF%vJtM~CK0jz|+0?&CX z`lYpo)aAWvtXk+9#pcaMdKKyIe39nVo79;BB@QA@>G`o&+GX``QKZ+9S}%X1?k=}x zM5VF89S1F{S1WtR(s@NoT}SI-Bif@qiZZdFJT&dlGx>iCGLN85=zC+}XufiA^HQZm z&2eLC+aiL@8HvW$C4bUXPbU2nrlHxN`!&?i)b@K9X=qs0^6hvH>mpyd#QWcm~-41R11jItmud@su(xnLYu2b%xdyTE}%kBEnocN{y&TO zA??R=@`Y1Mwu6*%;Z?_l>>#BqEur}rKGWwUoBUj^7P~4U@ZPjvytlomPYS0Ool+D|}`K%2dlF!S6e;8PA_kCOXLeWxDXx#%un{D}rC$GfdA#n>$ zZ#Q1_ukkOFLVwDxKQ<{+tK-afWsH`1H|FC7(0GpLVo{khmP@9*GbUZkV;XC>^Mt6( zn@#VHHH`DwR1HlCTcVZt>BH=QxKZ3vl?ahav`M}*pD{935osas;)5z^-dD=Tjnq_s zZ}r`*sqT&0S5YnX-=>hDa4F=|tWCGsJVjBOd;RdSKWNDMVSRn>^oe5=V{~gC_`yHl z*U#4CWhWcmw5e+C;$MQ!E1FC)jZA*6+_F1gMj#*f9r%$*$#6q)w@&=A2`lGL4E*Rl z;Zxkw2eU&0s~qD(8!sM4IfXKSx{LPK6VVp&Ph*lpc}SJa$%9Rm5*LYkp-ZsXg){58 zwqkKlOA+^+V#OHvs32O4)bgLUOpsZz_*N}$QGqzTpQVZShi*Bv*6vPvZiJ&n$3Isb!} zS+j2w%HjS1_cM9o9%4I?VS)-`w1Hp25=dUtHpZ~jtXR;AZ}-tG4{?8MxMvK$InUBU z1(A|c3w8nw?`9V#$n2Z*59N(f%LR{cKe-}F-9P&7wS3AuX9SVb3tgn$hkb5@G|%}T zHqX(=OS$WJ794GIEd6dSHin|GZyJnq{sG3)RP;_usuaNXi+0;*{Ux)r6N7JU!--C zsxo(_95m@rrnGsXXKSgy)jXrzJfqwd#rv~VtV-7+#%66PBkp!#1fiZ)3i| zL{Hm?`f$*)33%~>1nkykICmixR=myj@o{KbOx>}bqfNUg+T8xB3{{keR;TGt9rc0T z`|>Nk(IW0@lsR5=yqeI^810&eFmUS_S4}m+;g1Wn?h7(G8zz~=wDK9iDjNA{(wx-B z|I@m6%5*x(N%0c*>>J|#mBmx;?<$BKiQOv;9wy&82DR5hR{DB|K1R7()~}wtPgKiuWi1=+b2W3PrdI;`YHzeJ^ZY}gCbTqFzUn#&xfDR6uqCnH65L@ z!au-+-V6V`%C;j+N@C@Pu-uwSP@80RW1MC&_6n2zShZ9ZJo~Guh8p*5Jx@a;`xQH@ zp)-4aQG=2dlyPINlrgE{=bQwpB#yWh{L&`jgQh#(;}t!ua(K60DCqk-?Rld=0(Z}@ z`xocdO56`_7WZCnnsIkjL9`59qFTPCm$gP3>L}6_&lV^6qA?C4HILw_gw5@w@Iqs< z?A1pmXc1#lEay_ERYW}OBoUp8d}YfENyLTQz|##rcIj|t+LV>Lu7>A3i@x84Y(`be zD#dNTQ}Da7nNttyk9yx%oYjl4YjF2*756PCMts6qNf1u1weX93g>Ou=Zbt8jRm(Wz z%g>B;b+ey&wQF!+qOQX`%}u=PteVq}uip`aYhXS6k+<+J{bm;7W`$LYI{5X~SAxt@ zZN$!CXH7MuxpQp-ZXlq)uLRt)Wma`oz6fi0&-mD5581KI80VS`_0Nta=^fJX;Es1_ zPFn)*KP3UnrJZJhT7}ih-ru=@V`8*zUhB<_|=i(X?Pk|6L+@bkgK zhu5CVt0>9}w}U6%5gz$Gow+z=AgTj=eVXveU(DeeP*w>M z``yQe4QO!XAFZH+Uv-*A`djhNPZ#e7JL+8K?Jr_z(wk!@HXwm*NaHg^I;z)2Kc>QQ zAcP~_FGslly%!ak^2RD5%;m37ySSGOj&v8 za)t-ziT--SuwT?)$l7+71De08;GQ*ZV!*G&*n#%x$`sX&Rr~K#&IjcIcY&|95k9PQ zD=!8^Sm8V2uh$DdQSGz(EP`N#yTT(k2=BBd&x)x&thDnkxTn4FU&nu7a#C5fmfFy2 zL@fLtDy&+FIaYhrQrdo` zk32*gzwy!}nhgg+xWmsL6n^IEV?rydgfNGQF%_TPK04 z0;L^5y46#p55_NO!6*v{CW;Qi-<}ZuDELGs-y6rOC7kBlyt|gbn|1q*LAaUI{)h?2 zq=flLzw#~r-J!*5T*}Xe%nwm)_$4X!*upY7Y$2j>O}er|UMn&`jCA#Nk)Ay_s6RiU z!hsN;@QvZZ8{f)3%m<9IY9Xfg?c;^?2-0IwBJD9}!FWD0hJz-Jjm#@TX8|jnJrC5ev`|*LfC}xEczhtpju^+#uDLJT zWuEt#U{xM)A9#AA@RJUk-|{XJR=6)bHd%OVpN0`U`e210haY+>e1msJUsnFH!u{YY zQiXT8TCx%|C|FB(Ep-CEKU4U?7T+?ruB?({p_$10Ef1H~^L}=-p*mAf;_vxR{JTxs z{lL;fMS-7!Cog}hI)o3i>x|-@!b)@d!$Z~z53kZMoQV*u(%k0fF8;7wttNc}kX~3X z(ydc0cr;TEl18Bg+9Q3ssp10BMj2X*M~|8GQ6BIhxT~GS@XcOIx2de~)9{1#!ry1C zxXa=WR_<$O;P18xAC(YalMPB(^)e@oTV_lNnm2TdKSGuh_AKsUuHxSR&(R!l6$E|` ze&66#)93uhz6Gpm^IevL|bT3ap%}@V`9{7v$zqd8`WOmi}<@-75}jTV-K*(L=-(=w*^jyzd4ol zW$5%7tn0-%Dv_|n*dNfvo6`F;-PTqfXSBjBNnjp*G~Skk-#e;+3W<=qZo=ZLaO)bxV$Z&BAR#zfD#5g*H*8a$yf z*Y{PtPuv%8?}_PE_&pOb#M`_Z)VaG^-F>eiJ^omv!(E1zsTa4b71N;X3xxv>teGOMuo~pv((Jw{sHToHcU0Efx*$l~3E*bM$=0Iui{cSxo z)!hbv>2uiMPhP5iTN^C_nv2~|m2P48b?8ma}Hy53doUcHHT#EMkaKZZN} zGnJ3y5`&8)5`NTLc+R1X3`vw#zc^Z7s;E|SqtLEdCEDM!W_{0$Fdk%f3!b`GxaFFl z(Tr8FN*dY?EyYMVG;X56o8SpAATWezB zZw?7x{&yuN^_A5)CYK5Z!ZX@8EHAY%&#?GkzA%0SbS0|bar*wK*t?o+`wvHqJD};A z-(%(r4rCk!pFS-G=f{lR&98_lUh{sje)o48YWS|~EUI%4?~~`myT5bGvuuzi2K+vJ zXRz?$!JFN=8DZsmjECD^6kaOj6{nN3N@(+lE*MdA4j~>Oy>VHjE(@RW;G!Jh58)fG z34iWap3#7^(s@0CN5=^Nduy+Ayy%8i%X-$Z_La2KGA4h1O;hzLou>Yql|aBvcO~HX z*4z6rZ9-U0`l`-XE6M3G(min^ebHs*0$%mPfyPaQzk48jX6gIfla*CVU{PW~yoS0B z&2NVH6TBlIiFg0@n;Fcj7@G9N_V>HBoc?Y7TW8Ww!h6GG@vh`Pv?Ygt7@E|&#JzrW zWywgr(nLD#LjQC=j*EjP&He0m4GK?~A z=2WZ71Q8`^Wh8gpl+QE4Q=}npB%Q@eim;tSIf&GZdTsQ%MjDD$~Vkdo+e$uDcMfK`^D&<~Xk*4~~!z>{$DJ($UHy z+wD@&F%@+vc3Z1l$8!DDd*>Mxe8niZ_m>gZnSP>pt$~JbZL;7mwhCXA9m0j8tXhaxi^pvuL^jf0+eB)4sb(Xlx^W=HbGX-b;SD1$ zE#uCIRjcIHk+ZiD;sw(4P9lx1(?5nmEDma=^CgCZZeqCGe%m4*z%Xkus=pf1KtG!I zpHwhf~H=s4*5Zo7n#4;BHjs6{);BAgQ!DSoc#)3zd+T z%8Zdq)$~#h(%?fPJvZ(o-I;QLzlPs6cyNF3WcKi3g};F(82s0-->l)q46N{673Y}5 z`R2-N7iLxRKEmge%N@X%Jg~yw!c+Z(`>Z=nxylNE2fuVu_^2&QO7Te)tW@be zJkDSEwm&m_^MHj_sFK}X-S;8QM;aL@(mRJzz1eSqgI4?B#!t6n(Dec7!P6o= zw0JqQc*;QzP|TBp>nPi%-8M2?zKRvxGotO})N2*PV?5w1;4jY#Ki%N;VrHnYGWBf* zzj;~sKjXRv@M~bK61&h-?8tGq0=2_h;(+@}4Q;>tmzpD6NyLmR64B$aUl^YUBrX-U zhHtwr{BF5m?(52`Rk&&8b?PnrRY?uoQ&NXe;$#zESl&}2wdaJYU0 zsB^^LOP6h)QR1mqO6i-Qc2F<7uA`V+DN;<#?$Z>b3KOk42DO{}KQHC|U2?)2qZIRt zJ$B!zaIg6lybc_kFG16B@>-9e3-=E;3!RbNb7zwUZN`0zRl2%G_pDOtb6#B_i00ljInP1bIm>+YxJ>cM#`2cg&b5Mu>!X)tzXuc( z&q9~Ym_OPXPo}2lxzdf+NSWs5iQ=m#4$)Hn?x!hEtjgMxagx1cJhjNW5;PonYtq&I zt{Drp+tUjM@%6iw*4IU*u4<}#+Mf2-w+PrQDEgcOu!V9DI7_*2PPVzmq9Uck9pL+2 zgpVFuGl`wiSb5&r3SYZVcvimE3;rpGRcqOa_fGpu`xKhDoBa)cuVd{1cQ-e2e;&5c zk#B?&1nvkAHu%w+jk#4RE2rLe_&N{KpSrb0K=|!JahT zklv0G>4P2B*RaHk1AIUH;Vt2xt!OoqseP=3c88z4BfS3pKeqAXO{@~y99@*K9;l}2 zJ&@YRigeKE>|nw{EA8pfKI@SlLF)fTq;2Y{!IW~)qQ)KAJsznS(wsbzhBu8E$6yKvO&aJ@ zL7hh4NIjQls6Nx~TAvL}_uv3O3g5a$c;)hThqzl}g&%`QtrKo#6F-+fWMYN;z~gL% zC*6vu%qwhI;l6N(&BEK1n_8AW87p1=ark=&;gf#rHGmYcY8AI>ZM#oH;UgZY&%OBJ zy~0tvPZnK9|D|GR((P63M{B5br$4HY(+RwDw~P1F$Fo|nbU_UGN%&SL;msSWx+yFC z6#R^{@JFj%S?W+$xIcW;KH&+m6UahY;Q{d7Uc#3zTF9fKvcd!5`98uYpRT@;*%Yks zAow|7;dvngxJ@c6{4{*map5iA7hTO%CRX?vc!a^{#QC%2s;nILv+(VwMc+3yuRgsK zR;>woCODpDKI9zI=xZWv{dQP)_8{UQQuAT>_v@Dj2{LbPdlUK^i)|+A<}~sV0fPw` zd0PT@>GTP?s<2ww$3wo=ucV-BEse)=^XhKa^t#&Iah`woY{wiH~GXlS>adU=Uxe) zICJ7jR(r8h)vNH}4bRjy*u=9alUd3tRW)aZLp?)Q@t|-Gsq;pW_Wq(vV@q+6yKbR9 zxC2)4SDU7#uA|+vS+uq1?pneVGalL@DLJ9;=VW#Rsr6Qoj$gFqJBHCXz{BB}4c__C zAq%Fiu)-tY@!LedrolNMJ{F9Xal%db^;5!M_Rc@U7s9Y=MSipLit#OgpgRSRHkoG~<|~~(t^AWUm5=|z;u;!P`_Rv%eTP(B<0O?4-wkWd^-e+}wg2VgecEGTd$lqi zqiUEW(xzTbIQ5i+7PUvt;P-+;zW?aGC4WtprW!rua%n;4^J{jAZHEM%X#LT#%F9Qd zH27VLwN92|SN~kmjd!UioYOKE?qcw9)%G%QS61V+JYM2sjN(V~ZV)35?UhuCapvEC zYx%YX9`JkcYw5y&-&nU8`vtI;zFoA`eGGTkW~$4h#FzfJSxvw!`I(nT<@r{}q`bu4 z1xKiUnXNx)mHoGBomU#N>0S9-4cXnkqqkDY6szAfRiKCMMGd9=^>mAdp2vI{r=eX- z%H`8$@lC)ir~7PI!Pe-a)iI`aIjftOFhr*6fHY z9X)Sc-R8^qPA{KFi^^-t$AhqAZ@-aJNTFS4r6zsrrsa5fa_N6LCJ!ms#Zk&_Tm7eJ zY&f8F_#=3TlW@Q8KbGc`30UC?@F&i~zpdSY0ll(vWlnxx^|(n%{VI z-tKUfW=TYPW~WFy#tzxbgbxlz#v2O`?WREk61eF+LA%pUv?CX0rt-%rJhWyRvij3X zdgU^P8BcBIO{Z6=t@_Db5&?Jbmw+7(Rye|62?+~NhQIL;UjCFrc{V9vog%@Q`P+7HfihX^%oL10~ZWWDTg4yGhoV#89?KX{oJA)+PH@8PRvCc(U zEns5uk4H7s<^8z%q?wL);2H65*FBO)5fuZT0pERAcw(D~5dOuB75)sq{=D#I6M9eM zqcd1Jdotm+A;SNhR^65@C|I>3f1LPI?FPw0nsiyDlS-^(dQLe|k!<+hNa4NvOuWm0 z5v$e=Ypakgl*}s7?0whCE(fK%9y-2ua%3P;`Hf^ zTJd(n#L-m!ke{mN3g1vhPKK0GqJh_O#=?|D*}3p{?}g9(tv7Rp$|@nu?yK_O8OHv2 zvy+>d`^Z5nsM3Iqr!}-ZXr>yUD`#IG@F)BpUuL{LC8R1Lh53IaOJ; z5c3}j4iAe^gCW<|kbi zx80+5C%&hQc%zK_maQ7F;7dtrb}=8r274)dLTJcaOABR|-Z3Jppm+Q}=BID8+$*2; z8Y{@$FY%#mgE3l;)jiTH3o<{hx^hl0<6dj#n7pG_u;zGj;f$Fy><6-QbCB#3?e@g6 z@sJ!fX@A$ewt~!4Wq|aUM5MD`UomLB1RVE4-6;iTALVUTwL!iNOW7 z5}vhRxc~PZ7*;E*mcYfsC3~t}=Sb5%MVhegm!H`1ii1{~-MY+Pg3Pn$c&{xp<(L-Q z)zhGE>>>(ZMa0eC5-}!W2hVLPu2%TN#{XPJYJ>ExuSnA-g9FH8GGvsO%9e0 zsH{F&u@?6WXN^2RyvAJxfvaGgI$&Mk|(9q!(-;=ZK17gJ^`h*py2pH+X5Q>xHfhu5}}zO?6N+>bmE_aA0# z>1Ju6f@tnPd9U26p+yUm>QQ}rynP;tcbk^Q8H%VF@GbDDMBz=x1%xrbgB9)o&we7j z$Ko3tZDr+B*$O|HCH!^mQ=W`8u}YEVmA-lXP5mW=xf@RWX>@-nWj`Jm_s!3jQqnde zIv5cXhwN>~pRI|@fpLVte<>wZSkl0rZU(EAWPTUeZ~PUtTCyE!VxCCnm-&tvM&+Qj zLuS9rR;7O~<%HB@dA7RO5iV zLi!sazj6BZ9=odu4Br6{H2B(fmNpElu)sL%i2*nc zMs0rocsRb9U{_zO;HT>kglGYWE$cp0YF1 zTSfZGe=n@qz=nfJ&0*}evOlPGhJ8q{ZWHMoUq`0xl>;H%;5&8*Z`W`D!&_z55-Zy^ zVI)sr`;qS3FVa4rm43mP6$g<<{PD4--anoALi28tw%vGNEi$U$hzEK58&xvzfL-1W zHtv(=?Awm+#nk7r+$s06hm`wOw_bt#-Hg)V9`K-p!q1kx;>CM)Sm6iYXO0N3u%y$U zY&^#bKM1!vDtvZ8cj723^*RJk4HE7Y=GKG02di=3n(qZZt#QIwb2~HdV_loYxCTgF z%}PZ7vmr%8+rqDx)=&$-l6mBFm~z8TOSx48hp|?tO6QPx!p{c_U)Ew-HI`4YN{Hos zK9>FS@MG#L=|_fcwBt8+>QzADNaG$_n>|pGg+I-CxQ57$#!nj&K}qpCNq0 z!~WDwS+y)4@7rrk1QdD`ci!Eu>j>+IyL+a%*J#>;W21t=PrzfJ3s1;tKA$gqVWrY1 z;p_5+|G0P?PshrtwcG1gEq)PXzS-m*v9AbGPvMwO!zo;OApFr9;nTCfS;KB#tneWC16$#X+iqZHT3O+z;XZc4 zqj!uWj(KlqU_R?f_`@POUI-|e|Og9k3GS}n`wPgGM}=a3%UBhqU* zV_Pu6i~~Fve#YQV!N1<%GhT!}$ zopO-twa`wHZ}#n8r)Bnj$&4wK6oUH>A8}t--G%316-1Nvy^vf7X(-ZkKau*bY4S5$ zm~jxPIa1AExMdl)fs07}!bIv59mRc8If&H!aQVX{3wsDMFN7`U%j=8mrG|X2?%kJE znwKSDN^S(_gbE7}gS&?d|7?hN6E+lJCD+UF&`9Ckl8%?mBtPEb;rt43Eg z0uqDFZo=bV3SalNn;Y*7VU^6@*_Qekc6rUuz9L2>TH9BmJ=U@(<6h-KLqx$J8QgvU zHSVd(DruOf&41U@EeLT7>A?>YqWxtjX3vxZ{5Cv);|tXz)crh&v7oZTqv6SR!b|-h zS?3-X(*6JOncTNw8^*@SWtf@Goz0z@F*a;2o4a9bE_2z%Jtaj-A)=CNDHMq=Bub)O zBNdfON>U<;_&q=G^VR9``ThHRzuxcn=bZC7pYyq$b52cVBgwKgkyRnrO zo&Zm97CySe?r07ND~EX#esGKMTMc^cXO<7E9A@Z|vI`K{^r+e?k%%_JO|+YPW^ZP| zjR!mlzRg|uh36j*<^#Z3;mPnEFX3Znx954Ptngd#V>^W}&!|gpR9WG-;gP$9f7Pb~ zOSQ@hPl4~*BRsxYD=LYy!c*ao_X_`hW}CJAcM~f-4IZ#x_{uHw(^v|@3cmx7IVikJ zr~NE%C@VZ29)3u8@vqI9N5H>^~Td+>xa!Xw=rzGL18t5grW-mhy|Y~x;I36YKT z@;Q+f9zRXPtsLMv@Q^s+;d|ysv2PkHq3^@@#|v+o?#H1jtAsXh!FENv&k`aR>5dyB z-IOwWBm4SsAjAWBT$=EP9lniWN)D?QqG?;(e|T>#52?*Vk#@f~tqE&VI7lTbw?F9W z^f?~F%6+kKW8++P0UqM-_DKBO`gsMhghmu9XFfc-SooLw4^QVuepn?&x!2P7WcYnc zi~_WKo{QH1<$Okd%7ZrU5qwvv@BvA`RNx-ODlr_llvVH!E&sO;Wj4sQ*0_JbSt!K4 z@RhjV{A4E^(^U}dEOdFk(~=TAMjCJRSlz0%|CmK9pd8>&;5%0fzj~`Gk11uPyIBPH z+AKV?G<%+uQYWDJ6JnI0 zedI0Lw88V3$5kGj#^>-OzQQkBjJ(hG0IXW^c6GNIK!_Je*Z7OHb1Q4=qjKPMmBRO( z67Kfm4(qbYDk1Katq2}#^4AA~%R~ zNnV@NlGiu=P4cSjTEtPS`lxQgE2QhrinNJCgMloL{S(y&v`Q_*A z;ZW{Adm?Udmx#+&3}XMEiYs?txpwsM;g3{bW-Z!+qoRG-z=dl8logIOz9uTtlug3Q_NURkZJ^&36q=K#agJg-v&-ZX|dn+yq9#NY#)uR6r8*||{ zP~z2DQsPE)chTCba%-jA7c;VlhJN`oI9ZUnyfx6}u|4Za&IF9hm4HVN4@&1-D})uP z`C*lv>%;VhW=W-m#>9ddFyN@u3UM?q-0B8)9^51@*{QYqr=J!@iS%ltIkx=t4F^ry@x;0m$>eyr+UrBF`_GMRDxo{>sR801 z+Pm=_o@xXktOwlwsPO$;_Pu1A9#*5YyUNaJooDr5XsJr}O!VdeJaJD75_hM}Ifod` z5=5k~WkcbFfO*3y!49O!r$p+$th3|xKj1*pB@R1^3 z$HL0_-350&FZ}&0Z?iP0tWx4~_egO5M{164H`?RzqD_AA2DMFj(2neZ?@kmxZM;Lg zrG>I;M_BXwo;5V|`{pP56Q!`~KU1jIdkMJT2$-4~V#jM~gw?!XY+P^Dbn})9Z+Edd z#oUK?YLXPEiS_wE`9M4|;NB|gZQ+v|%%S+o3ipA#qzGT$uo(}1Wu+AR;hqLx^yjEH zjAyaxrKp)_jLXbh^Z6T(>ZSSP@XcPrA3qu8z{Y&6 z@L;&r0pYX$*>jprqgc7YLg2{IvarHT|~-1;7eF0e>7We8A$G)E;H!9G!$0-xeMnwZxC% zHC8R<@iy^YkcK18NfYUTxzF>MD#SsPzVFpURh3gn<1 z#wG}5)k1VQK1y+_}!TRd6808F*^G@ZZKy*-P!js)g9Q?$T^RL?S&^ zBvSXAEtA>GjsrXjzU`Utl#IWs)52nnVIZ->PB71FM8K*O1S5 zySAMWaY%!Aiu9c?teUbv00)lzBK%5-@X@<$foZwP>$erAfqp z_e1gb_eiP8^gdDK5Y55Iyq(kkL7Ieg*CUY@T=89H5eh2Nj zjiUA35m1Xa+wjoO@6y#BjMs(C4c6cLtnQ_ST-9jYH0@a5YCrUxhQ5mU%RuHy9sBM3 zYUG|yQEWVyWTAuRZl4vZZ`4k4_`_I&H_N%f*H^tRbeAM&4@;6=IU}3!SrSswJII1( z2Mf2Z6T+&UvTBJ=^f{uhdSwNi-bK`Vct1Za-rjREYw)WNV({3?hChrGessq)#_`Ik zozoiA9rp?{pY{#g5BgEdZU0A}+MAz4z!%99FsJJ{CR0>c{Tv01@$bnY-A5aETeNQd z`~Jl<77s1#q_ay_Y2|4eJ@E_f-CVrAGQ_*b{Ih46H6(^)DmQ7GHZh@%uyQY~oLiqX zf(!ouf151vpIm23BNiu#qGflm`lm6{Jfxn5B7JyvD4hi5ph>6JIWd&!sfS1p6^V4h z#vG=om4lR^+(g0U-w)N&+|MT5(I*N%kNf5U$@7VLq(mZSH2!2aZ!i#7ydRhCv;TO+ z@@8D+0;I_=MEZNzs1s~9!hsNv;7?11ABf6jIY?Qx0&LngM}0xL5NY}=ky=06$1;d= z5UJT{+fGWVN4CdEcdsl_ZOOdP>r|so;Q)UEKWrs@ly#Gdbg8hyi{N&v4L-E?7Cx4M zwfc`$pTe)W2!Azk?EpB|*6&xXz#lw4eTT|(xgX=-RWJ1h;OO)|yQFO4WjieEeRZb; zxr&JyvRPuT?(-veyNb-{?-@MOO}OLt4o7))1gl;_V&~lXM>{+F+>=yqu>|*wZQ>q& za~kVXDhMsZbNHRT!uvF~ie)hft9I7L`ue{m$ecpC6#A_(kSkX=me1*`4=i@A?mv}F z^MWL6d?iWZ+gCqiivp>%az2gsQ@!0%r1^d#U0q~#nl>5-ZuggPXMf>moNeLCsuikD z*C$oAsBex7)<@p<11jt!(JKO;HUj#*c$ey~!g6abw`IZam?UbnzfUio{aCfAU%rv_ zOhXGcR@E#QR{3FY6~N27Dzv=Ctsx``_j9uB>n?c;Ol0Qw~q)%nKh_;j7>q zB8BG%6`x}$ffa5IUlk?1(Uab3ydjPiZUes-Bm8pSlIi5d%9&pcx4AAn_SXuGo|RRK zZr&7k+Ai5nO|V6}`=&_0*xWjcFT>&>QuFB+{b|m>MniS8{p((5gvHzOriNOj-21-gMVF-d?>nV~@AP zbMgM!XB%fr#n8N$*UfQ9x)$lHmCx0!pL+MdpLih*2a%eU`{cpnA8^O5Lweszr00Hb z*_@$14%(649@YLEIU$Y?Wgi^~s`R&-K6AkRnvJ*zPOrjaPX!V8jLxsmU200yFfHOP zrxQ&Wwy(!K-buVCedNwQG!;Xn=7pP=-sq&}eZ64D?;3Kh<6=D4Big-A>+QJc5ciZL zIUX1}s(qNpQ%q$NZ}WNiYxTA>wSXUI9$TlOdqL@YIk`>*eBmO6F8pNmQvMc0SWVh4 z{PXWPz70t4ZWF0*KoVVSkQC9s)=jpO%xmKPC3n#VZU?c7a{Keh*ypJtK zCkRKs34T9F_`6B&|L}=%tXg4Dei3EOdgW%MyTe8LdGC~Md@BqGOxZpJ6~Pz z@>&fKh?Sz3d#@q)mq~lX)4Yt+Hx;N~Zo85<@Ra0T`!s(v%Y|eYsag9!og-tWElAg% z7O8`OwQu+iEe;(0R`}sF!Z%%uV*ISEoK!dX)o9^e8f7!rtgKS9a$Bj3M~%;;W!1vou9)2q={}^P+eO+Sryp}C%0ZKks$r+Hc_Vf4 z5b4smD;F#+lmpxcp5-Zg$?e>AJZ`WOdO!T|ZsG4P7}1`kTdWe=Y+Pc_P5qt_zDTbd zQd_UfoLJ?+h%r461Z(KZfDrYgoCA2L`-=B6x8iOL%ZVXU z^Ml+SKC+3U00)si4HW6*#RaojV8H=?2<{Lhyh5!Xn8;LCLi@x0PYC~~smEJP#$(k= zaVk64o)7^@OCv>E(eWftKIK4&!|;n2g?Fm|f}2rUwGe#=c2%D=JAyR!x=3Shwr9#k zIcU5ymOR3-YN4C@ zSALTa$B?eb6Y11L!OTY}2l#RLg#zK<`CZt^t}CpB4u;=&Bz#t{=RClaRSO+k+|-*8 zAxKjVX^UkuBA7PC0Uiq9P$(fv*EMU#!~s@#7`*hc@ch)nbJ;L|J@YC>{D@DI)<*X!DWU#`|z%#9d z7gUK}%o6}BJQAL5FT953hz(2%VTDJ*6W0pg85;PKmIN#OEIi0r_}nY?Sg2A~cr^Ti z!8^w-;gFP-JMJ9ZYMba+KHt5A)d#HFp^m%jJXJ&U1O5smY7E}z4DYv^u4n34#ekoO zZ`mPHt313q*wR8-Ik6YuCA)KEj6)QX*zBNSnkQxaL9+Z_+ za2=jVJy3uYR%?lUlwVwm%Ehq;8Vbw{e21th zc&~mX-V?f4riD>4m}N?ZZ&~$H-E7uHoxPb8!78_Vxi|hsRvp)h7-?u-Y(zV4efv{P zQ{Vx=0}rwl-qiD5dU481>~whiI^hkhTJa23R*7Bi-GzngYt|x02HN!XqV2VAH@ynw z0ndboY!Dv$UH^~xLKjxf#$EU+SK&3%tnbqC!77Jt_QOtjHQ6f2TsPPd^8IgkXW@O@ zQ@ks72xJmZ#n4V%NtfCew19gCf1)~F_we@j67NRsL-Tp;5QC;O8=kXA_{TrIs|MRx z<#@|=Id`?n(&sDd?eR-h6Mnd_@fLTN54X|osUW)h_?Hh=WxJ2|;(pPFoa=;JZ#m9xeTkqq(e7F>=cEI;OU(!uG;PX4?sM&%%yl;ev_w~#! zw2UeS{2}~SsPIX{M!Rzx({x0u}d z+v^FrU#J|Jk|U>YyKt@o8ebqw4aU%nzg_%$B~I(ppV`tVCW?BJv(tRX$^( z3@7a@PQCB(tA=JK{1G6?9JstSy7QZw>iEH<{VBZ_ISL(Ksm6F)kD6RTl}VFM4cotg zwq_Ml4`-1k9QLTq2h(wolUT0ZUb1nk-phFLUo-U_w8lMplemZV>_qQR1)&5s@Ni$@ z)m^(V>87kw0&~F8cCDiaBe~T`ANh&2%b10~@g64*T4DEHv>v5-dyc8pTF{HGudj8T zkQmiPw0G-Jr5vdp(#K~+ z+IVhtph#A4?mqCJZMiVy0glvg;)|e z#MoJBUX?Gsd`=P75pU<4;$5}L>8*Stj~Eop2_Bp*d~NnAF08U@QPZmPwp**J8<6fz z5$U70joFZ-95m_oC-0~)CORWMa!;f=K@U#wAy6DdYBnt?Z2})5bwPS2Tci_)yUd~` zz(I?8D{Fia+o(4pwJ8v(*Oo=}|CECkHDcmEE2-|~9>Z>wc#p>lElH^W_?3*YQimAa*@64sn|KELXMua>ELR^fc2y5fEA zg?K;v^C1r@6@#c-;65vtJ92AxPg_5o4e(gC5MzRF8f&%YA7EOvJfwQ)Tk*bbBi^OK z-!ftUsMM90;);p6@1n&y7%? zhRP}-%u6_?T12$kn(dDErI%>G|EuQ{+CV(CbaDS>7{9o9^q_1LV6Wb1^l7&Aen-C0 zJkLax)Ys6y;1SUp8fD*ViiWz4I)9lX^q_P{cS`BrNxSrdSE(o?+!JoKOL**q>U-I- zffc?3?q=|1g-?07D=XX!zG1iMFRwcDJrfyNnIzo__wW^d)^!KZGG&#bm}jcj^sai7 z6*6G?0ZnDOWS8-S!*bgWE#}ruyf3^#)IE6b3=;24KYU!B&!i9oz89Wm@Uz~Pzq7PZR`@=+ z)iKdmdb#v%N`V#b4L=zyyhjZe=9iR}dgTMp4HMolVfdds%dkpO%vs>;>)u<Fwe`h=Xw7IN=^)wKy}% zDk02zQ7>up6QqZbmKf5+_iNE_R1R9fD!I2ALNYYAh8p_R zb8}-2J)F2@kcM`~?l)Ra^Yo5BoNukEo;mk1_79mV_sX#$n(A-waeCK(=*xGTbN&N4 z(zM5Nq_)Ga?X$E{$E#jLI*Q@MGcnZO{ck$cfS4t$`7q8%Sk^+&k*{B$mAjVBjc1st zn%8djEzNP$rG(oWT3SDOlc2k0vD*GKdkwWIh>{$6E+v^byyL+*qt2*35hrkW+9~cQ2Y3H~m1u%+Bq!nayM*7&@??HYS+yf+-Zg9tA;OVv-Y?Q$ zmkeSqSUC{l6x{KM@T(mM((h1KEkx(;Qwj+Yfz&5Rq>c^y#}*R+RRmYDFPE zi!}bSNCyx9vMQSyaL}ZE_Ow?c-)N)<6GZBFp~X;33+13mn|AaJqhRNdK1~#<``6tW ziYNzo4BYva@Q#rao!AhHmC)zm+fs%1w-|n&FD+u#LRT30Y%3uyAib6$(ob_^qFlHDi?!<}Lh|TO-wXjzfCLkUscuC{pD>h>LKmdlI6C!`NrMmV{L+ z#h~losr&m9(#_e1bWH7EnF7KAei`nUBi!=KapU1wdD>oq7d;YgG3VeC-YLMUl`dhc zwT+go;-p{I-11etqn?O&kD4zg^E*jmz^}m_iiNixag=9=vclux8 z<{pXY({^BGzN|uA(VBH={coj_ntP0UQEfryX46sr&wtibQ*Ip6+r~qmb~l##%vOE3 zf3P~{6iRYruaw05x8Skt+o3%0RQMGi;kTyd(Q8vyPG=h2!B=?cf#+Ko(qfeYgnswB zG51;eRz*VGLF()$(v0Vy7SZd+LCv?q{X&GF^^0XRpsdoemfICot!buewKLFeJt5iy zGc0P+ox=m32|phtJm8}WbUTz4ei#1itni)-8r|m09$4X7@O9C`*S|lS!%0T-;JR5%VlJKjQv)VCNj}@K+cfKlo>(B{sW#zQohwq9P{>#+bH0#PLr^S5n z(Q1{qS|!Xyy7jt9OJ-X?Wa1nLLOg&6WeN}6@yi`P&x}>OwAI}AHY7wI(s)DaR%_LK zcDdjHe+a*GUqZ|;Nv_XSB35`lJUCbQXZbA{R4FUG0G{(m`1hGTrn2J~EBp~W;jwVL zR(0q?Dl5DYzT%1S^9A==fl*fYV|a9l@YuVPc(y7l{0Y2pxs_@jj@0>h7(*AV@FMu? zmBJmvJeWdOR`^r+rZvK+KKpYFk0q=$YQ^w;7vViGrslKmh*eIFdAoS7PcY_1%nosG z{jCl}eTH|4r+D``KJ^gSo*3{F`29V?+gVIt0Hv&4i0AM`U*YYi-1)@PLRqy7(dFc> z8_c%7K8Jx%rF-mdB^ai!!q8Ynqh)mr1s zv<{gxsfWczJN~rx5@}epNIPWiImv74IOuoQgpc|eKWQ#^w^0HUxX+FE9m`F)oL*G=l~$Njo%4(X zHXFp!_io))ZSxA!Y$}p8&Bj#`31-Dc+@|fbBVgiI3D{-q zp;5d}Ojz+YZ_HXZ?+(!d`Xv4OVfAYjs@kja_=x+PNhc07TTKwrn%~Z9w5!cz&AsT@ z2QxMF)u_^Ag3Nc2{#m>-Sddxjv$xLI(Hw7e?qtk~nAiEwlCPg?s@<)f!nIg6<1ReW zRKAYA)f~rKj%xdUIjY#dUL9j|7sm!)2fuJYc<`*6|MI}W3U`2SJ0v`F@F1?gvQj74 z!!wQw&)8m*@s6@;rC1m2H<&8qh&1MeNQ?J|umY_dL>k=xb;qaMrCI4xU&>A6c8K1h zxAncME}zT@(}{?g;S#aS)}|y^akb=ANBbFDEX(a`neEx+7~QB1xJN{YdmW#*FL7lF zBH7C|ec$vPvx-XOj5aq$w84K=`3fsj7Gpz)wwb6 zKDj-}k+NQL6x68vfSwDPxJI6EkB!2UUJh=?&L*sqJ9X~sTd7_6zn!`3b|5Wr73n`W zKD@yvY;cfDe$3oCKC9ZPpR}Xj=F-$?zs%Eo*Xf%e^?dgtCz^XKAQ@xxnFYe zH*OEJjeTSEfc2s>>rqfn?V*CqBe%DT8>gYOp*j1s@c(9>zRQ)}NlEhkq$JBGEoCJ@ zl}Gcgd|$c`gI0j&A6(WK zOTKmS^wyiHF1ATV!&&b4zhCcM`xAHRKC;}1kt`MqJ9gnUN^)rhnl!AX@n|wn(%MaS z#zW`mve#9r(y_cW){?MssPK-&q4{Dhk9nsn;~OLcMfBel9L(uNIJE@gC!10j6j z53UIRAvtU>D-c+<5R)?Rst-o`Aw7Ooq}>mmnqg_795m@Y|F3g-kQ_kjd|jkXzL}E2 zsvQpc6-u4*XFiqgAlmE6qIF&P9^-E1Az{t466n#nxrVOaA3d0Bc?fU&6!E_FS30wA zDu!05Sc@W~%9;TmxX;(`?;B$mtJw&D0^UoLfGs1|q_GM_SP5vZ-b81wP{Zy3q#>Ci z-4f<7jbB^g06z>rpDVma;31|+m6gy(;L8hz-^(4ehtVNc34OF|M}Xsi*mpUsK%{#N z>5llvj_g*)K|8Et*8}cq=+_Nn3p8}%agO@I-cbT(7fbF1<6RDLXAxGU=1H0NvuiNL z4?>#rOr%Nm`%@*90~hKT+`-vKweRjpC)U$&VwDi)uReNDzhOLBua*5MX8(OXz*<%QuonRt5xk|*bGq*C6r{apc z*+Op$wjW}&?M`Lmxmz>NP3LezaF5(6?lm|0yR+GrAX@eohwDxfWDa62e)}VOkzNWB>D5Mm(;rq2@H6mYgSQy_^9sOa0&SjK&(tneuK z@i5`P#7yeS(hgRNau$9+T=?anoj)*5hE*%|_T-_{sIAdR-Qq>sYe6Qn)5<}l=Izqa z_CI5IZlZ`unZ}=Qea$TZ;~rj@Wd$MzB}l}^zdvM_Q^loFF>u?P!XrjCC}1}ZR>@?3 zclzQded}>t=aHr)inM*tcb4X))g2y;8ds%6&dRK_BWyeHC= z^)r}2RSxhtcy6}vk!ycl$SMt1_(ix!j&NVcj{Vs&h?SI=;9K&9#}rIm!3$kjwNvTf z&~!Q>E+dV3DAFf0{@cU{fpLIef#(=JB=FaF*-eZUeieScK=gM)r*QR@6@Cr=@R9Iu za)&JA3l>=6@$iHa;c?#TcX-MQzYfnexJ%ZKSG?GR6@CN0u~hV*B<@S0i-Z-P0DtyM zc-M$!P3RP3h2MlQ&NUrK_yct`nLp}ZPzjK%*A%=LHRXntD(ov)-NaOd4 zbn^cDH!a0MOXU3R6}8DB6=_6(NIy7W$0J%fXwnHw()8PF$FK?)L}hlEKl(kcHM!FW z=pHBmJr91zlCBD?1-#g{nOY*egETitq|R=)kSYg}nnzUgC;L;Jx^$$jVIrMB@h4`A zm4g=b;7FSo4O#wDNo}>sz}xAhcptg6mfE9Y@Q})cho2Q*?~SV;F)xi(E5JO5)|aIs zl>4CCjr^!tguRP<;(2jDd*~(inF_*jWx>xT3lIEvizSN~ShbSXs&Y>)kljO?X-KpF z-p`m+Il!~whi@4nx}7^o{l&_8$Wfuwgtuxt@fY-1wGwxmao}?;TmCz#YD(@t-tn2@ zZ9nS)tEVc4Cav|~XHgU&7iqpBO%JJF!O}uGz#qU9?n#Kd2~nR~S|}^ui_C)ul?bo) zq!FW5Wz`B6etL=i8o*m$ejKS4V0w1-g&I2l(W7n}>ePMnn;g+Y(mr`EX@{kR(|)Ps zT3X*D8&y-0k94b@t-60I^?mxarG;{U7r^}uUh&xZ_nBtK3V#Gov=@E1C*HraogOPG z3*iYHh5LrqqzO@0t#rXHhuRV1G19$TMY?{>N}i3%0saKO+D-U7WAD{r6$&diV-bAA zZs9YpZ63jvFsxeW=u;`Z1({Ev&ekIWHC4qSkJOs>QvyEOCjo2b`m;=>!cvWj;i(6N z=d88Pq=ST23o$#tUbKb=FMswkQJ>-c@Su3V9WWq-y*|W%m%!Z)33r<8(aq9AS>ey& zeg@xN^6qS&Ygpkg;A;Xz@807T)lpfi_pDk9_X-mJC@qA|ipu)>dlB2F%J_~Q(0MiE z4rv8kHTqY>qxN!R4f)aP^tjo;HqROWm9m491wPmp<#UDtRU9jhZhy`D?jHTKXFj(Y=X z6I~_kM=^g<@jH`TOMCQNP748%weCGI%7{4j2c3k~FXgFMud07rPZn{HMH@q(x-qxQk>%lXP z7!3Ni!Hc%(pdhy^iy2A_32)}cy z>6;8cuxiD~ybz-XYaU3CMvC9oMFm}LGFAGnLI^)F7 zHLON6=U!I4@Tiu?zUU33U)MaZ4lRu*v-yecw2rm(RrFk++!~x&FOrKdVqR2qIdu=@|Mf)tKQmQ74bK#v-?gx?Qs} zb_to6uT5%SeMan`q(pr>@Pn33i#d>8lq5YxN;2Y&0rZPid88zvWi#8w|E)4+U(6gY zlK$(9_inuN)5UvaLs#Y=R1ER?%8J<|7TC0J}LcU&B)GNhy4`p_6sSTOrP7-}dB-uEa2!nwYXXW~}#D2e<})Xl-7JwsYRH zpV$V82PHTFcU*0!o{z__q%*OjtXc^g+D;y=p$E&~SNHNkyu%FdzF$6lhnEqEq2{&W zXV*#8;2{I;sR>xMgV^%L#;-Kgvik3{H8j7|r7+qZe*#`K0?z$#^dweX39FT9!qb*& zku3n}&h?VJ*@|s6s>*>f9ftdF7JegUa|z3+SS3VU_t*8P%7bmq1etpQzWv_K=;fKG z|9J9tUlJW5;I=Ii(C(@o6X+@|i2~sP+l6mRNNU5TFsxcxE5BS7A;^sS&ilFg`55=c zr(3y3M+unbApwt`^J~io5eTb!pKaLGSwpKVhpBJc2C3ur6z}4ROLy}QH`-VQF^{k3+&h!Vahx31 z$0Wzdk5-Ro!!em8huJu;8x~$iL(bm$RvPO0e6*v6I<)IhNarV*9I3}8$D5aeS*lQ( zL~0hN+mh@O%{yZLmy0!&fB2};u$YeT1a;Ey=9KV*YL{RLX`MqQ?fYZb-eD64$+>=^ z@D<_0Et+g-#YdX4YKiI|^VUmPIy2}6-eGu$M2h$3=|>$|o+F0l9hdt5{&drP?H>~; z(+Rwq;c?Nz@89lKkIxrjrM85_PsIp7u+^81A2!eDfvIFAkpboEHnQ z!Xx4P4Boy?Z5KX0f|Vjh!85Li{+lQZdV|WU6>)ER@w*Hp&mvuOOQcn%K3T-pVVJ6gNW*PK`owj5JKA#`7WzwHin)GqN*8j}}lszqf9n|>(&$|S?3%$gswUyCQMmVDuR;prM0|MrPo z4b?io@)xdlG64?+Nx<*kxWjG&6;_g$o2sew&Ia{4w_EDSkBj#1`VP(cQVt#x*6ffp zPVN~&&AzRq7eu;oR~x$U%7N!=3jAV*@HPYMdGXZQP8Suj^*Q!>dotNJwc2{5}bS8YQjqu4aHR$dtt5*D;Hb1D( zdfi3pW=MV0|77M>Il!~v>1!lJx7FR5`cPK*J*Br3p5%Dq0JCCPxdhqpBL+XX+T$Cx zGho$@CgOU)Q4QU8|1p~a=inW=Nuq`)$0hI?Sz>6?nCQuBVd*~7?Yl*~-0BpAH07X4 zKbUpCmWF!1dw3Vc&&4}sk9hy?(}4$=iUEHB5A_iq_|5PMe24`rJP*F@i11FO{~lub z1}g=A2!9ePyn6As7nu3Ns->LLc$%72$wwM}LZp%Fo(3`Hhyx)C;0GdwJG{G;$Ck2c zA&M*eZ|AjvM@SQMMCzVbh1omhV6+!6%LZ1xoBib|?vMMueqz`~u5B&I>@LSx6}>H< zd+8S!HCg{3GgB#JA&HCbOXBvIr}blEpY$R%Tl?NaeAJfk$4E<`iS*RVX{;wH z2dz9!_FvEk1-a|0P7#&)5b#>C%aaTJgn%iI>r~~QcEaN{-7vyx(td9RPS%i5ZRb{$ zya?|do5cI!#S&(3RSc1q`w-W-yN|d)Pm%67q-_d^*J2U{2O7#^_{(h);&$5$Y$#Dy zId|oL3+(#5-YsH0L%Y#KwDk&pV(m$Jz)Rqv22WpW&HSUX!k@!edWyc%W8X+t<*>qE zz;_#b-GBelC@3qu6n5e8p6wL)$7tYPKwU%^lA68#qst>^P0 zNUU=BQDxsD`=a3A8-!TCmM=|si}cExE*5-+4F~uN_^JKEw=T_RQd?OGy%PS&U-<5h zKGwWRg;heE?XuhZDOO0Wkfwx)v_a!Dw9CptyI!}lHdZCuDx~{PiuB`!e&(|9 z3C<2Ygp^eZ68hEan`K{Cv?n2Kk@{W{saw~OGc3yBKy6q9e{ofK-RAk+gUTwkq1-%b z_vUG8;>iweM!aZuo!EDdJ(_sH?cr;agdeXwZy5WJvBKBFv(kjGw*8WBsj|Y?!5wmh zA8zl;q?)qA9pEkxgn!te4K-F-;p^eg3|=rZViiB3#tL_YU(6T1^MlPx*w2dvsJ?Y{cOABSys>=9kBaInq*O{-c#I>b!jTt7hLS=T`U5Pef69H|VBw)+> zwYkkySgk_6ojB-64ed`(RSQp>@m}pL-leNuIoV9K#pFK(`qT;^HzZI!TDOF!}c zpGP!QZNQccp>`$dd%-I1<}5b4yc z#XR$rgM{^sDeM1-)u~-gb00b?T)mj;f%~;H;=c8rYioI(kRWhRxaV2n^JBJMr0K!R zj^Q0}w@bpmUKdn>?IKtubiik?E7hOF@2}O4_56(BO;V_P7t0FO$FEv|CfoUTC;idh z_>1AoI3r%mu#xV^fW}7#tW+?SjXq z3imp_my@cjS^>s+{%Z{K%>UCi-}dH7Df*?gWkp|E@5ET~G%ttO(C+!%hr3CVpC?Je z+AaHxPZW_#OLBYd$wnILa^;^e4UKnf)SUz0L%{7%B;e zq*q>u)OJc6KR(TkgBG=p!xdwYWDXebHfV2LLGxh7$9&y~A=W+u=B-?>8kP6^Za>d= zGYBi^qFnutd~bSzBr)C37Bn+%>H}rpiyz#-eKJSmO~hbpiFoJ3l-10K5m)n`of6!I z%jknNd9_G8oc_H9i%2-ogzSeua1vf2Ws)23S7OzU^0Q56jVU$r<#4~bYZl|}s|v71 zy!$LmrV^+a;%#=^hE%DdkCrEonqp7!{qVl$A>Mr#Teo2ykQiF=yG~iZmxtH^q>g(< zI(ciWZhWZa)0DepGTu|(4@yK9MtOgQKT0lMEcMC=0CD}jDsefmG^H=+RGrMZf8YW82Bx_ zAC-eh%}3xZ+nFQfgp})Vc-8&lBAJeNmuS4TQx7ATBC(+{pDY+MOJ*gtReclci>rW)DS`* zN|cb{-CG3mX;lJ?w%kNRjf!6-Nl0_edhj=0yJ^R6H(>To3Li>D&t!?{Q7E-7K`@@yjNw2cjA(cJUvtlP5MRBWn+fLydE9A z#;fn5pTs-U@Lt;Z=jME0i5Ob(f2+3G=+Kz0kz>}gNUD7}-Yf4(?nk4R9-*I33^_;T zKIs)a@18sJ6sOQ$c_iA1&c>Sl9XYTY>dhNoI!fRkp4R( zz797H4)93$?h*;nXJv;emKMs&IgNrR8N745cj@;kt9A^o3!DBXsHE(VE!Io2|Hb<( z-T}`g>YZB6>D8(jA~ow+qk>M0w6dP~W~=((L^R%3uf#jP-^gNGcw%t4=iq$KOg(nm z|DH_KsjOOvrZZFf6Cwtw+X|5$@tniJQ8^IeJbbUg?v zp_PP~SvuLBQs6*+iG}a96@LEKc^CFlVAbnO&R4Zmx;T~2&M3y6`z(Je4@qafA?J2+ z&|tz|L`wfa9o&eA^;%Lg93*VH#>V}8uDWQK(0VzG_HM=HUvazO0ly4?Zt$56Zr-QA zi_rY!A-6F>75vQFPA~o;C9uckX zk?0!IEjvW&SF7L0tgPdpNm~!}(x2?UBW!PyC?4{?D1WR1P9FyG(C}v^1uC z9Ok@k;gW`A?-!NX`K)L4M^DO>PQcqYCE)so`-d{HCM;DY1D<8@TUN_s+0TnrLYOVI zTcw(}G<37={U3;$sgCHDL_KEvZ96`(Lk##`_|`n(QImVq%qc5pAPesIQ23tC-Mcdk z#wwxBIy|DpKNRUbq(z3bxb~-Xu9SmTicYC*)%!QuNOKA#s%N0u%&r_X>GL1n@j;q{ zG`2{jmtG7X!M=SQv;xfjYVlF~pzYaqZ!)EfgGkM{>PEcrzwZU)&U<|c zdL_=hqy_xpMb8YaIN`qCUubA&mvhzBuLDUNv{ur#cG^yxt&&RvbSR<9>m-lAXl?v{ zCEwgr>TeUTB?9Anl%(;R;I$gu5H9S4{sM|@s6GMK_&JB z6GQWE@I&9h8ru19gR6Ky#M{qRycdmg`jc-O5JRNq}j)>HKS;u#1 z3~|t;r-PQ)Ck(!;3b@SWXX=QCXrN)PpwFvLn)8hTG^;DWh z6$AbhzWt1F@23;5GkuE{UJTDR_<((9nJiFN_%rzWOQN6g=*NXDs9}Yd!1FE(uQ&b> zO{ucNpTljh2v6-&TA3+atne3bzXai(ZqH@wp0dJA;h{H$53Llvk);8w@R#rcgOC2T z3Qsa+g};KAq>8?AzhUffP*(Wzbv#cqgdZ5Tzbdb?VTG@NpUe^7x_WS5wmD#huY{j| zApG*Ypo!c9Sm9RiBM*hUr@PUAQ&#vYc<>|PXFDa*8&OuqBG&LdMZzOf?%J?Eh*fUI za<|=z;975Jm#J&e1+}Zf2KUq#;$Ck-rz0$D5Cpy&e(aU-0jaCDavHJ1ZQ-sfHmC;Y z)sERaxExsFYv6mWgjar=d5bED6>bN2wiSNqhjBa!l@)FeU$<6xilg5@G+bEWYvCJQ zgqJqUPUE}8SmEp7E*ph+jJr92CoNXGLJsg(n}lER??^Cu!^(!pU;DZaphB-l zdwIKP19n!*SN~A&SE|+he}AvsOFL5|>eL!d2^{hE_7LyCGE#U5sTgo4_yaHD4O}LD zVQHbPlxzch?*ZZG>IO5rtE^J83+`oOuaJ)e)P7lKv|)yJ;4GV)yf}decdHBBIY45x z5538vin40O`(bpu3LM-6+PvkNk4hs&)BhTHa4q6lhv-bO?amp-u-Pm zFJ>z=G2olwSHdLfu|F#GV=Wyk1#^WvMF{`7X3X0>JF#k~azn+;W=OXneR)o#Emt?> zN-GDEn*IAK7B$r}%T}bzFNpM=?EFQ{_~HO}g9pb7Z};GhExfmbmC)PZ)|Z6uNDLdx z!YNkmm{SM;QJoOmk>0!_(vq-#OhqdPxI6sJRpIWxwQ^yL3|2yW!0#mqAMtk~x3jWp z2j~!y+JF$ANDGohy5@0oOM2Kiz<0p?QiV^k&N{@eqOrog;6-V|Gn!i$@<}7C@SX7V zbm0rGxU}GlI9TDk;HU2if9G5zdS!+0hWlp=-+S?;IxAS=d*CN>g^!7UGS|{VS>b!( zDG!9tO$ld>O<6hAeehj{!f$7{W;R1vwL`6uKQEFVpEpvwS0W9$d6AULL8QJDUqAMJ zd))b6y9Pan{_ktSX1%koR^u3D@*&{ywa%(Jsn$1h0q?sKmYZike2=5>tA`e|nx(9I ztLAgQNIhwM(Ple|);(z!JzV9%arwcM_6m268+eyXh*dkT>YvyIknRA|^ZP{FVbmfX zCd$FMS07bM0h8^wcep`d+)%iC!uW@T2hX zRN+o1C;!C$0<44%f(P6YK5ShALw{w}LSLQz?@B@(LmKfyq*l!~@Ss%=gg6dA_fq(X zIZIfnQ&#O{ggNvrLUr;cFK`2(vd<1;MQQ=3Up1N@>V%5sj z=FVWXxOy7tu@fRa==a@U>^H^%eg?iSTzK%dyNp+rmC%uJ_cOw?W8Jy?l~p^j-}zPb zLmGuN-jLp`S-kjwCj$#W9>i`YKMOL;d?O;#3ZVh=F_E5*}C3j>!yV)e5$3y@hH`&Lg$E zBhu?J$@O@#9|w_MFIy)`$O&2~D6wp{+;zpKQnm3D@1VQleRKSWOoyu&TB5>s6PrqH zEB7MiQ~w?McyZ&H2YLm3STZ7o3K&b0O?i?e;d}#TkW?y3VxGGR-|o03$Q;}iw0o$} z6pgssf4->9O8(Es-d}UZ;>eL@>;zdWOfp-G#4d1``&vYI+nq{`jEJ8P?W7ys}Rvo9)!oX)#eWvA0~-uNZrZq5!L zpZ~Tog>SY;jqCQ(CkdhlCIoSE6G-B|Lz4X6M9LIJ` zjyebJMzW!uOz{@bD!|S(>`ZPnMe%1G{oxsLw~wgGFhvD{r^CY|g?Fsj>j&Pu#R|`WN1YYEWMHKL#;91~ znegN1gl}18&C^m@x#8}@OXGyEYdonNpU}c8M`B*RUA<51eRR*bq1i;uQl+>k-bFEE z7K4`2_vmx+j?NPA>p!`TXO@i^ zn)izFAACUp9w4>O73s%a|6~$cIdF~h;9ClXAAWLu3OmuTYR8r}$EAZ@_HupZ^f$in zV}|n~?vX{}-eh4-p0g^5Xvq&Bx#Gx%h9Gvk89{MN2=m zb|+)ZoLBaoP8;T{_XKl56DlGgF{AH=|%(K6K!p9Dw&LsYlkrAyW?VNh++`sSW%m=or!`NcXQ6>EXc2y)4B+q|s&n zBw75^z`T%n+B3x+ zh38zp%`}g)%4sh?P`1^6fak7}+NrEJZFpzGmf(KdaBo)QQ-8jkK@g7QIee9~gblB; z_(xve!>S$hgvXWD?>Ju|^>Y>J!Uz6a=|1BiB`EiTPod+JzC7DX(VjE39^H~-I6-)5 zCA;raL2qWKojUiSsLcLQ{rvWi^xE~JO4Krr=_N^$jU=t=Pp-~tIjP{U;5$5}pp&B- z(wS6N4q&+huYBwf{$AnA>pUi~O6+a9WsPn0uXd@#Sb^4IpJ)pn6!F|t9^Abv;l;kf zANRcb4?7UCYUj(R`0y_6SikHL_9JK83h%uK#5?)7(}{cwl^B||?y~^(C$m*Z*Mx|4 z^Oy!r_=z(Pnsktzm1+~Lk-A?HY0LAUB=ag74w}?!-_4;&ZIB*I5~=4spUKQ4;h;$) zfBoHqGq4(I>TQuWAJT^ksvO|9@TUgvI>w2~17(G;fuG0_eem`q#?s14N;~-Wd%{P= ze0!f^2v#lS_Tx3?62cy-%L9>qQ!TQXQ7jJB{k8BbPlca)b>%E?n_-m;SFR_X^w&D0 z=Vm^l=l*%{3$EEZ+!IQ~J$Kn}%rmGUS_xW=vNSsFX1CidY_Pfz4yydiH>+mBW$=I! znh|0c-eoWBT0WtF0skH3GL?GDwBEuvC0wdKnN?=TPX zZr8ea60>N;;I`NZFWN1h$>h{(Zh*@Avz2KIfdz`P|Mq zcD}-ov^vp=OB1VByq>#iv?qiU(wl~KY{n$6V&wqe0l#=qLM)lzFNl?4tZ--eU4!SW z^`MuptfX{-=LLxV!C&!1`9>yIEoI&PmDNCJC(?C?MLOMf^ch}a!vXFJ&o=n6xl0zX z(vOvza)ZAL6Mbm!$~;k(RcdPM+R~buJuP+}*X%B|r%#JEyvgsYnFq#0v}N{zEg!Sc zm?Si>*@CV2)%$h3aeraB-)?aA7lsxDf$xDkL`&GiGy88~#tJKZFWf0k`1q=qcp@n) z+#PP4AiUAayr^t-~_K08^!cO0?8z2PPIg%|yIXfYcr zvBG`ePS)GijrZ^G^%z1bE6)~RxZ8H&6+*|*&?u|k8hCW-T23o=lbqUT1exEnSkmsg z(WX8f{HAmJ@tg%EBtJlsSSLxcqr>bJ<}69Ykirk{;3C}4{~ua2W!0{(v7X=S4V=q6 zEq~Kg>jI*T@oQx1mvHVKxbU;4YH}|B62vNU+ z4lAee5d4;p@H*=!u^6SST4>Mtf7=ow0I8L)NVomtIF-|a0~c^0JULLf>)MC6xplGX z&BBZ4dm3tCr@7xytARndZwnRoi#M*Z$x8*H`*#@bdrJ89yw@sadTGqKDJwh-zV3?f^3}bwc%uX>JRF{A@MYHLlGy%=m3HGO z{C0}yf7oc#h|O_Wr7DX9OWTdXJv}{%5rH=Hs%V!Et=Wn#^mxFJ!2?o-k63$fIxlTw zg&&7I8@$|PmrD#Yuu?6ND$Y&Ox0tne6)zcMm1;4c75|-Ip+cWPdNf0%kKfPb!Jr)A zC*fOigg>vit~JAFtngECFN1e}>xK_2Ls;Qa@Z7tiFR|#>lP)S&4*xX#V4m<(xl8Q$ z2Q^kX{4$%eDphDxo692_?a^nVjc8nsZm#msPW+xd-x>Fpc_a=?XB+!mO;mk!T*Yes z<*URH@!?B}X!+ipNKP(sCA-Vb(#mi5&42ABi#gv>DJZ&@mbgP&c&vtIY;G|~LrE)E z=vyQLvuC%^RGZH1`CLO6Tb=rqGZ#yNuf382-`LtLhcAjyY)#s;XsTMjID<6W%1Jem z*B{o{&kP<8nsmDJ!e~yyS)`j+iS)BYGyY|-4-Qfdj`vEdp~atFR}=Oe+Mub72_J8$miIieikaqxVDXa2g1E{w9mFTkH{5PkCl@#pA-V1>uS zm)i>eGCYr&17(FLz@wdomyEUN+EG@DcoBZxO?XWFg}Pi*Sfz;OU4QnHmHK*oB2o{3 zk$$nzb_e?aaF8P}^ZN>$<^LLAgkFBQv^Kt3-FUx*G%uiGdB^mXb}PUCtT@EWL_8WK5jU^x(3~+8akaBB z`ShYlYAFe+)nSpY`esB1??2(d_YAMV!;cBSb31Nm45P7()y-J zTG!lNbofOzHfRr2xWG^EctnuOv|=_a#y6|HrCD?eo*$`UC%+1Am6& zeGBjW)jL#k)}Yxsy80@HR)DS+Uw)^d=dM59piH;%UcN@WujX|uW@8R9sHY5g=6d0F zd!B`}>Vj1(Q_G$8KcxVfNE7Wv>gzf71l=qgL~4F(;!@q?6*TYVfd`M^orSlpqj;YP z-q@L?U}9)xP4TSep`p5?2bIu(WaFK?L%c7&@57v@ilHUSs=TPXaWw?J_2$kvl(qVn z7V-AfmrW_p9Tjn(MD(iix(zokaW!eDCsU0BG`F1WTfAHiLUZs=-Y?!R9~@(_sbX-6 z-i6x*2(Q1j;C;IHSfx;9hKnygtF0!pa?yqcind|Gpp8t};{m@1k2HASR)3G+Q_Wc6 z_u(&2ihjzdX-C;Zg_Y|!4}KzA_+Pws0;GPKBDLOskA-LDAXVn~xb$gLA+7ljoU})1H)e^p%IYlUK$M3T zHqbjT)Ig=}<2$z3D^sY)c;{z}_qz=0*1Qiqgbm3g-p z2kN>A9+fYA<>g}(R#_#4*?30HNRHM}uc2Z3{Ot5i4b&sQn1JgGB;c>xceLfbQo_QY zz#kL}-?)F}TkNdD$^`RM__OE2Tb_=g8>y^PTV*Gc%V)(4vohZs^u6nwP8~eM|4NDY zkFC&^ZmWu7RM#hOu8dVbM>U|bpCirO;H(;)&J(80U~T~iO}e3N6Jv_b9H&`X6(7L+ z1>Q+p#k*4E1ULG-#L&F=H%TiIWIiL_59s(0#Vo;l{dV!r*cOvWV@C{;nj4h;jWGm1)mh4i7DNCPU2W1y%U;IH9syM-Uf$)<;(tc13* zWlh)Mr-II}<81+~659NG$E}|)sv)s8(o{q0-*9O+y5=|#VmUnQkc1vnVQw|{A7Ir= z7rHnki5gph^h}^geZP;fW}_7jA~maL_<=t9f@$dWfjvpI67Pq>;(a1CShcUj5O4F3 zuz&W+R6CzmA$<}i(iMqIX407A0ACH?9wEH$)fg|f)L@0LfoB^$D6~9_63R+}*TOx{ zi++z?D;hy%m6YbAd$8T7#$FloC*uR+W@Qm|9o|uf_wfa@=J2{IF^FmdKYmf7wyWp& znBOX3)uQ&gP`f~od5Tl_q^Wn3*W+z>#VAu+=qu*yh@syf*;NO>t3`ZvZ{A^QaRct2 z$>Q#_z&n#d5k!+d?o-l}@^3`Cf3R$NOPWMGq|P}a4RPwpC9NFfAj%9!!oHoPHVxUMeUT^Hc4xl(#nM7~ zNZ6p#SEibN{{MbDlr-hnx)jy{Zo0rwD!+MTjSAeZVBb_zy9^j=&{n;(7!IKoUcEk zT^|2ANvoOfs*On3(5FYLtHIP(RU{+Lz=_QmOsQn*v#Hxu{?#t3{mL3qZxq|9FiQ;Y zWpA3gU1P>q(!$mokf-p|6 zC2ulUl`0S13GQz2^h?#~5GpH|$`1I8O`@M$;TtBdlvP5T*ZYB*FV#$jGtw3IB0VuF ziO|YHq-LWL8{Jh+hq)l#=qS=(W(}iFRSxi-@RQqxzgw90JwLL?N@!QOtF!QJZ?$9Y zNLjT5?2z}OJR#hWChivLqTFyE70Lm=3-0VL{Ntd_SJ)4M6}}rDzfX9Rz3&cUnFK3C zqCN1_hlJn#LcK$ytlEKp8k;4|>M8%@V`Ck{?A?qA8BtGSnP^*^%U8LF z_L8>vn51p>P1^)^c#&L7o7n6vy&)L-#o`XslRMtQC&jz+=Z8MwZY751?YHaK5ghkE zq;BU#8Z`WD6+Z2U1Kb0C?xOIXJpz~0l46B>!V?X??PPPhg33zD{qU1FMPHJh#T=Wm zYAG!SBvdAZ7t-g3)ak88O_>Y80qzaIcS}M9c(^klP*%7P{K*~RF1hV)@+`zkN?&+Z zp75?0hV-Lni&avZjs1xYyLS-c0Me@uMLOI5FwK{8fcwGY9}ACt@AEEf|HBIRho>2Q zxXWV3YRU>f2={#<`iy0vpYg#Ftnfqd@Z~$zjcq&HuO?4?tndK1&kEtQLqDs;`(9Y# zf$$@%gnvAt^UefTcsTrohwzGZyco(UEBq+jdB5=7;&e;?n1K}@ z0nan|ho@d~-6|_>{4w|;AJPApcd;s4Ah1du+)pd5gTaMs4-n%x+MNeP``&N9)PeG# zY9ryk0m3`R{`Dn82&@vL%v%g6A4hK2uAtYO=Pw}a3EYcA#67spWoOp^2?9R}-w0hkDx{@O=H!HzWC-_YPKmBX+)w(Pn;RCl($82fS-Z;T@t=^ z#IW?%YX+(xdYeep49!5E6wUM)Z!Cs^ZNE0$eI(|xCMIO#Li1hiVZ=S(*61=8U zu!~3|vqb7}Z|Z3l<8UBEBHSli`0&W2`3$+RYT33m4^R!jC8Vi$M7l4dngT~!PEX_GbF zw#o`mhreDSd{s#h9S>!N-+-T6DZE^!M;ue7SUER0;SUU6Ddi(Z2Fj`(>Y?8{sK);m z(!5m?qDABBy%^EqK%L%(Z`>gK`-O8E1}Li*Vu1h3$r`ftsBElBm`@*v{*6>~mqEat zM!>{~$H&<@N?3R%ym+G|n)FS3)`FCk5p@4nC+mg#LdS4;5P9uiCo&6e?k!jeg|&nBz)TMxx`ggcnT9)Nb(cI{*TZ7$Q!1ZC25&wPw#7dAf|5JYE?p$OAFHN*|}N5%1qgh`}gQdsWNkF z=0}Tzfg&sOQ9!HOdtYlc`@^fPMmNb^?dj%Ft2d`Amja$UA_eR_a1OmWRZQ_V`(3vk zrW>2{%=40-+S4eCiAGPkd7pmQJp#r=NWcmOSDG-RMOZCh-p<4ES_wzL_+bIXxsUg~ zQ{p{qdgw5ov&7J(ey#HxYXRTx=4mO&>>z*dkn6~q$s=I=c?tNN=Q~qratRB6057^A zd{tT?Yb46b)t?VPnIL@Atp~B(6tp-zbSCi7YQ+BW z0W}r*9O>~Ak?#C4)QgRPIFyw#us*{^> z5G6>jTDhraaZ|T;s+q$9{t_O&N_f5e)t_?qu)<%#i&qQpS3Z;Hjk1#RHT=XH;kn;g z1hORytE4nOCf}n9WCx!kw*Cs=AKdxaBFzZI^hBTh5cb^p{(%b@Rgf{Ctck* zhVD65_zL*J&BBXEq^)PKK34cjc;r^$pM^TN;|YV6n`agLnv3vCo1>TuRaUKteQP%U ze-oLrWAygI^4(Rcz^e(EwNnD_{I}yjwC{w4uYup&BYaTMwoX((R`^KtcvTCPm^I5;m8u}r-#&3em!QFQ!H+-O}+W59f;cm1cN5CP; zad&cB1UEF9G-=O=SM>4TjL;F+IlJps2?NAC<(+x67%dV*^PYKOy%Pty0jWorNCyp= zdYku6aA2If5xzGZn;`Qe%uSLz&e9Uqj@x!$Lu(uVG*&~4 z=gkeKIGad&BvR78a9GfuDJzmwAGYuZr-fIa;mVUoStW#dy*Ak8o2*6cGOVKdU9KJ8 z7h=SFa#|Dxz?Ok0trq=@uoCA(Ivl;Qy227h7j zc}pJJ@k%;Y?#S(M=XB9Of06kPpEty+9qUB5az;nUJTLBv;eTi&Ky+7cM<3cp$+JZIf;#>2`AcY{APc+AT&b=d=n6}}5@^HTIB zvFquWDJy(8+~u|K(1q=2ij|eSW)J+x%3bPd5%R)`r>3$>rI|NzRLx&@YxU?IIiN0A z(q6pXHj4L%9${9@+Y&>h9;FL0-bG&O!*%XRS2&9F!$WVgl%gC&YHk#`HLg)D%DN9} zjv@W1UJ^H$a)5ilop(rxF3(pd^Iic~xF`JRZsC8m>PTl$#;0L!Vkf(L<+aH|NR+n{9=U%z}K8K^uB+6%mfowcp!ZB zDdCGx<%Och3J+584Sr`(t4VzM3@iLFJpQ!kFV3Iy9zzDKRAn&SHCA}1@tGylqfq8e?#*@G$ruga5eqV@{B=Qi^c+&8wn66IbOV{~y7sm12-v8~t(g zNytwPINYOn7u*u>Ml~%5^Z5#5Xa%lwXvBCDMIhapDbnv77Sg>`4qBq?JO1}Ggn-h2 zk@@UspG5JG;r-C?zHU8@t%oWG{5bq-mPD;xF`cld59R(LEt z+u%b(GaIv23@iK$y!eIaZxsGKk7plN4(TlXj@53}xY;c{x|JCStlGJ0Q|=G-39)lX zeXK>=_PxNv>u3OY(;05x&F!B!WR(}DXD<(VFRy_Rt z7Aeo+)_$}~%Br2cX5a47`@OT8?^a{51iaG>?^RQ~)7Muq;1}Tsw@K7apZBNDQC4^& zJbb(GzUOT(bK_#A6qi&SPvN7we9S{sS)~-_y+3O~1!DoryvJLP>-ChVm+{`{xT z0IcvdxXnr74YF_fu~7;u{2KhQ!RuYQNu#H%@au5367ExIV zeH-q1Q~2RC@loth!78C|mu^R?@A!%OSU?8S>^mZTc}9J4K{;rpXxzuXA=xsKdKHK? zCi)+5`iwXbA`2d|W{rGm5oh}PjEyS}0392`gjr7PmkuLp4?PFFBgt!AQ*(ki7 z2|L0sy}3eSb-+6&)kZ?%-i zH&*yPxV?k$_Jf~{We*Eh_ zA0Q0~6zRMF*c@d-5(n*Q${%@JNVa^W>mx-P^v*mRmN#*LKZI{PAw2%ajXrc1u)+)A z1t*2~tkIaxg|fmQ!Ec-rUi_J7F>7>KDavEG&pF}!Zq2;M$Q!FxlnHI(RSQ~(bmc{n z9_@aa=ZbP5L=k-ZW#RtK{^ageRxQNDl<;gq6eB&7F4B~n`_{701PAyN_=y|Bx72W^ zaZ^_KQ+QOS@YnOxm^xBc_%pa~mhhh}*ErEIV1+-2Kgki^u3g&ud}{(L`~`ePuJBjm zGnundR(J_~`#s?w2FCLIP*(U$_)&wuZjs|o2Nf%a`U;*`B>H2E{@h7ktlFW*U#z62 zG+rYuHl){vR~x~LMmR7Gv9jm#wA!m~hW8!P8P_PQJVY{mOXo^Qj)?t{7}jX>SBdu2 zo}`(U;sIX{-?&=%!{BCNY~#TSUjcWt5q`3F*J_p)%1V2=5`NcScsJjK!R&{?D#bRN zXv^n!e%Fqq)ANC9UTGEHE)L?oz~SGEtTPY;z8b!Ni||#8r$1zKGgc~T4Lp0B@Ug%C z=+83+tCnrm@^WfXdM(nEo+7RA_(chuw{Xy;mM?1TB-=Wqj$R^ty6tDCf|LUxY~V@$ z!k2W~Rhie>uxcUh{(iUuA=V>ZA0$$TrG1z{P!3ej26)MF;fp`2%A%LDYIX5zi(z`l zVr%ZGll&EABi=SA#rxTdK^5sf6XXAH(Dqx|Lj7@a6YA_}QBS-PLSwIdv|NKW4UVC> zwn*2+h_v}Fzg)fqi38jYemqwAC+(lsW}iJ)xIMh!obc%zo-;I8R`vRX1BSQ^G5pwh z5|^AZYgKe~QZ-`>gE=a+3af5x%`z{N^S7EBUyianTDry>Ft%uz7Oc2-$0yn`SuBW1 z6J+l6Znko{(S)1v-+s?S?J?U-firTYz;RiJ2hm}t*jhmQ8vpy#i&@~zw`*@>Ro4;k zgO9}f&==ciGF1$@!^$ivbe{0#QY~VS#s^i0a0~8XhWoBQ*GBVaJ%TXhw-tW)nNf=| zR-1X57ONIw->sMW@W1idNnW?)woUFPpz}@%xMu&P9cn~bg6&Ah^zSZE-u94Mw>l7>81D@+C1!y_hnlq)W z9GfRR`hf7Jd%AMDE2~xwxmV|1M!FyA?L#76HnQ+6UkAlOq-N>vHBCz(n-|hYhV;&! zOIvu24hKSb!*>Krh#t+eXEE1+RSQvLu(x_P`yh1;5$RWddUfR@z=06H@N*HuXC`>~ zQIl9DggG<`oto925C@RDoD}J=hf8?uC z_(mGCeNagsEgrkIXQ8G# zl9R8`u}+U#7f!7lrX+_hN=e$EjkcswqCA@SFsJ3uXbysr?z=3~l_%etPM;YEOZ!z+` zwl~&w#m67pX$7nj`|=;|*iZ_y=9U!3eapGm?Ea%jn)JhhtH!98qewN-@h3nFW)wEv>bSu_uEnjIA&>{0WK#$;Upd<$^9Zp@>yc|DYh4p zN~GqSHJ2~!tgd-~k?p9alp^qcYIrBt4Dw|uj~MV{aEB)nb(hP=SpF1_mA3vk-0qd| zimy&_sLCp#&2wI|GSm1RVwnfK=fS+@gpI^~?V5e+iFrQgK^3->5d?k$9&T`trnQ;a zP*!U2B>eGK(bxHHGINc}s-+7~o*b!PC!bzCov9u0fuDnYH1tKeMD-i4QzUWOCP`{P zbF$|>ZBl8{NF*Vy^O2rLdf8Q^VP3s?;wuMD+GO3Q zJL$tjBi-OG($sUVllhPb4w^J7>Btg6=FbVQFZjtg$mrp3E}fEuUSDdC{a1IqLvdor z5$r2D3QjxUI#(xm$bTu|?7#UgbN6zTPEKfl7eg*b@RY_gr2oHa&R=4l^O*ku%_ z@(kW?q2e9&X9-t`iUB_hKV|S%AJ5-pX`!s}bMUptMDOkPjQLV!rNHOm+s_Ek_(T0X zL|L^0e`Jx<6lok%A48gDksi&SP8_rXACDV$mTVW0Mj6uD<8Hjgt%?K9M?8GndC4|5 zq&!bRWt9--XG^}%t)oBPYaD54Ogfv@u+{a1nh8iC;L&&q*yd_=26rkf1I>%@yO)JG z|90vP-Yvu`mv5Qb%AZ}H_TWS$qTQM-+GiCU>M*3hLkeZ4`|p0AXbq+KR8?~bm+*dZ zO}r~7`Z_bFA%;lJzWFzw9qU42FC#6vF49-E2QijZ4)7#++6{wWpZFaEajb;C0{6@n z{^(rePH?OeI=FO``(@v;+i5V8kp>isw5d(}V}414gBl%f3ad$% zjbp_$%2XKCoqw_4uU&@o$&UQ|yiISQUhj)^tKMetlDlO{dr^4Zs%;xwf9UWl}0 z{4J!)L6i1R%2_RF`M@{#`FrguzvBE{!~0-~cpvGptp%%##NZ;k4v%^zd_{YkOuqPn zRlmr#wvM<#jC8ceR(Pl;IVj-#JYL+v1AYUZzE*e>hwk)1l@)#yzS2hc{w_nB@Sw#C zzXf+S_!n-2li1*e6@D8YxL))j)6Xy|q^$4^_!EPl{rb@X)-bWcGvRADihf3e@wCRu z%8AQ@Z*>!X_utRs_z4MCsTQ+U`l@qHqoFb{j#S@@^R)W>y~A+hVl`FItAEy+9NFY> z_mCV1Zg?`~pfYLRGp;<-FOGLZ%Xx~*97TVdwED0hb4!Wm>IWZkaoizCkf-FxJ?c=C zNntXH)V!(R>9Si*DdZrH^AhQBrvpRT--81o?!xc*3J?DIaW*~UpkE1ff1G$*a}TM}L+t^*hxd>LZ;*uT8aMV4 zTd1&7vOKu&IpOuUcc225RSWI(e!@LMJV1K>yhsPMxIjaw90-vQ54|LO+8-C_RVu55 z2yXl4@^7?!;5kA(MEcN>W(@IZ#%@R);0186%Mzl;-@BQpP*(UOxaSq&EjvA@@mE&( zV-?5X-&eN0%b*G?MJa^mr;2{FU5yl${;*0>%v04os`uNpQ$ zv|Y-^1gspxGkC@dPj!2Ly6^8UyiAK#3TECm^JZJLAjET|=WIk;)N0}iHt^yAe*s@- zFMLho4~Ou%AgqKgfxp}?e8@W08B$j5m0$kyr`+8ot9_c<|_d&M^OtRYIHhY_%B!)O?(k1MB}DBDI>cZ6sGX4sdJuuKmK7 zw6JAnQd!~4;l2j)sSHS%bh`#lxFe+SG;Va?C4eoxe7SBdyg|C7?GWdZ{ z8a8BnfRz?~HQXjd;?&QtK)b1|T7{>_j6S6u%^$<-Y$xg(yz>li3$L&K;jSPCd@bDJ zh(vASG=d6LRw`;8+%H^sr{HLs0%g@gciv{ZnGiNea}DXPmCs#SJj8(z>*0kbCB(dk z6}bA9RSR+dlbA+?*nl)LN~Bvp-m#8tMmTWH8{r`rg@1W(Uvm}&uxcTCSk=^rPvxfs ztLgqtc*hyuhs&2^SzE<`+rn2|lBmCBU1zYZtZ+N{!z;pPADi+A!z!$Bd-%!};b+_L z;nq-AxC8v6!LP4*{vl5ktnkh7R|da)d*FO}s#vKINBD+o5+@~~Ry2(sR_$oo7uRS@ zh%HFHu8Z`o<69hAA;AH@6@DRI_!+lKyZ8kOR`@pf`n$rbjY<8CMN6#k?eI1Cg>SOC z(3+)FtZ*lI{6pauH}5cQq^uNi2mE}Y@Z|bIRDrT;MI2VYQz24kq|cv<^kk3!1~QVv zL6hd#AF(2v3)0+YBK_^TO-mLeaDeZG`TKn@W@wIxEp+p z)qd6H?Ea$R2rgo*@Lh^q3t!~$=VJCFV1@67hb$M~y4N@s3zU`1Y7g9Yo$yHO&+c&R zVbzLWHQ}VbA$Qr#Wop0RUc8+Q?+1%&(X~=B;O=mLgV*|`TP0ql!b(N$gWp*%*>1It zV6?8RTDIfk4h%%YQeUL0dqw(V(+}(OSydb~X~Rgn|HyU#X}~^_y5BmJ z!Mr#Q)lQVJ;)mg$pBNq<_iRMlh*@Ho56)_V&yA^P6Q$hyV}zy}|6)J8+m z-G4bEXk}>^;hmJO#%S9NKP}SQnB6kb+7=^6iKAJQQ)iX?f@<*R5H25*L&(iNV#lH# z2ck)<#9VPkdJt)Fph#a`x1d|09JCUCG^Kw*wRPpI96}p+OtgcFdM{TaCkx{f3}t?M z9i4bpKRHz!%(Bw553+2n-wZPwRWfD-%)?0?9JE|>%t+2sjdlPV5vZbKJ;f))?> zF}TNd;S*;J<=LaG@Z<2EH-s;{l+%=PB38D*#C8W)))$}A)V7j;`;kRE2_bsxZ2+FFR ztzO+mhHBT#vWRc%YiO>oM*xXV5s;Ti)MMiFebbndQen9)qTs2^g|G5*=V7ROka+i(6f+RCKj!mooHKb`0EQE5qM}}A7vG%3Cij7rvBfZ`)eVSnP>10+biBz zKB-obVFocIQ<B+JDf>mLUudgt!EMnIwFB*bn{K%!O4#n2p$& z3oFJ^;g^v*riyf1_g^3I%O@N(X=A^6`XW){gBl-@C<*VZYvO&$Z#x&NilH5rSHHK{ zQ`Rd;ccqK8Z}7Mle4h#jcrrZxhVToEUVq0vL9B#Mf#+umPYqjM%pYE`YN7j2aQ>WD z;40GG0+9yK?A(@lWE`|(c(Ax{Rn5D1vuXNr*yU9}+pwb zBvsOYk%6puVAYO#chRRs8hYO^PG4@BGj{ScUJFVmV3wT(d|a^XFJ9szta!Wr`{q*K zfANF8TELptOOI-(Z*XH{rNsQ_^!d)mduysj^TWQRQM*Cf+gl{<@K3`Tq^aa0H7h)9 z?%;t^V}3TJwYYZe=d(1KW%cMVElKRo`b}wTZjvN=yCnJa!!R!whjPHp-!iJ;>0&QS(@rMqN0bG*q;HnC!r7+cLx+|2teZIrMw-GbG&A77O8 zp_AT}Xvx=`^eK;@le(zeHIpo^-jc;F>F2eKBFQD*=Aqlyy0C(RW+6RnNF$eCWB8#Q z;MwpzgNMx)my7qEW8(eyx4n5-sTf4P2fuhicxLmDx6%c{DpAcf%^|hx z=w0`-A)CHq7WY2hht7z1m7Ue;ZmJksEPi2e+b{0Cj9WDd0Yd^O6UT(L%Q(voqxG8X@XS?-63G(142AP zdd85pvF*;Ht8$=edJK=slo0E!p7EqpR_#DG9^VuxX!VjehdZ@FsDq}eK98@Eu|<`D z&UYkW8+7^|?9wFqukAbhM-*hwxztXhbzo_ulfrz*ur88E7rdF~B+`sm6*lm3vl z)R<_qD*d;~jL!A-d#IY5XC7sGLcpMx60q*&ueBf`R;!Y^9;s6>tt-h2688CLi+ zc#grl7It_{HxVmM({uQWRiaO?Ix>eDZ>&-<^Ioj%(&cx#;UAhG1sM8X`#8eBzq0up`Gzhmc+Ku(D!4Cr*T@A<6RUg-j7~g3}gD77?LR^tMnOEzoxT3 zG%51WQ@zj?xCfmT_dX*hO=8uOAX+Btf`Oem)|E(K#))*9{ok}<%7J5D1<$`EyocN0 zQ@C-l8dYdtI%55%-{E-Dtwy^pO|&DIKeJ*WjE9!)cGWK)5q1sItm`5zxZju=MCBl1 zcQ}?F*k{iNy{2euRncx4MY}MhHVgT9P_^seId_Gxda3r%FT*P7%xgBg+(6@IGF!vt z!@Jibstw+8x#E4O=N9IXRSfugxYd2(`)6MMoh^=7;Tzy?2Dk9E-Oa)vR`^D^eZJ@$ z`;T4B941yuw+X)Psql{B4|oJAt5&*_-J{lMs6o;5bfVhg?e$E&&#g#&hxZAH0k>08 zON2Kq`ML_P*0}l@Ot&&yMd8-c+kMTao&2 z5oy}SkK6MeFb>**AE?`C2GzC=X~GVXUas{AeR$=dNvn3~)>~NjDh5&a!8c_I@BHPyZ|JLG)e4rr z>;wH#Un4Cvd_?lF;uSZ$o`{9`e|0HkuWmX5V!oA?0 z_oWmo7j(PMet4{04&HG40^w^X7qHHztlBYm8z3KL_d)7!NDpuOt|yacI1s`Y9#|wH z+*U;lrtgDQ3lTr+JN2Kj14th{6=}~k2U&Pj4q9Cd-}_Q^M*Wc9SbspZ5c4gk59A#k z9JHu4NA}bEj#eA1H>17w$9t8ncy}80T{M5vCWc(P4>wnR^CXQuSMoNQ4x)XyO|(-+ ztmL?qhgPUB##I=mp>y?pU*mm9W!f#?!#=4@#i|&Z^u6j4?iy-zuEH=*O90*xd&Rr% ziinlWm=OaW2=~}0+-2~bQ}ly#ufzg;r1-{p<2Ho+)PQCGBHFh)c5`&2wjStIZc zG`!uretLnIi--X~1`jcK`KPY2EVW>zV8`JH&P%qzJ3RXH#}up*+MJ%deEgPb<0Fx- zxggScw<_%89abDD@CkUK!4o=GXC+8kwbI#^zc)ccle*=+qyQ)J4vm+nZAyBzp%RH9 zQnSJOs$R0%hkOcY`W2CGU+{u!MmcCvTRpoLBgibiecXI!iXVk{Vv2YV{2}2Svuebk z0H;;)Q-xQ)G%%k}xMI}`P@HjBeQ`V*=`%wbvbf-5_P^nvNpGcJDMz*#q}S6V>Vkhm zK49At4je-)JTzVSzJ^VAGLwi^3*lvxqF)LLlBH`s?@A8;ZR_y?@+Fd<|G!bc%A^o7sT$*O(ph+KI zx>lQPmykXwmZ-}bb>MPT4pir5__620*9}Rf+oY^oh~&n5_4T;lyJUM4H3{#VFU0%a zwGoflT|*4`75I)4;nl{p_vT|+SSfHa+`-CEJxfN!SE729Rm=8nt)=rRSPIfjt3~?y zbTQ9W<)BF|*5!r^GTWt@4c#-VEvj-A?*u#X9-H?)-B%Su9y?aGQs9TwT zkxt)r?S>Yz|E>Rwe!?%)DUF0e^tJ!Qdg^jj@44sn&fTr?lAJY zEgsJ3QDui`z+JtiJinfPhryAu!ZYE!4PNWazSg`WgB6|yKVtCZm6p=9Dl0r2p6?@Z zey%@sHDCS2$_07{e#Te$kF&=;wX{%HDWW;Z&q;hS8EFpEB178Xi_I@t{l`H&8k>Tz zRjYFsX{w(@-SuFV8>4X?2$2il?=QUX!8l(Yz*w~q3qHB3UPZcx^rayk7PMy&CkO|T znm?U$dtjyZ4Btn3FifK6>`V!xD}#eb&1XmFi+?)`GN*g{MD5%q$UHxT`)yT=wRr?Q zbW{Sq{qLx??5!g#m-GX8;Yr~aD!lg=ui9YMLOhA?Ydj#$s0|iZQLkR);~f_z-ZtK^ z=sKtv@Q3hBgO7NBzcuTuSQ!Krz|X`Phc&aqa~cG!S~llbac$-5Ox;&HF1p*M+<1|h zSLeO@oz!#p5fPIUC8ERBJEJ%*;%d?<1Iy`Gt?TIBf8zZZ@1x1$-RpWwdKfB(R-Q9M zFICr&%a1M9CaXfc6H>*y>A`I|>>wqENX?V<=cpO2sE{J01%~v=Hy4--Qx4UJR4Ims z-jNXAshuBMS}5zAS9}ATN#~kR`Munbzh5gu?%a#|AkA|3g$Wev2{G5?NX!pXe|KcO zOJvRa-7XGWIR2+dH{^=6{h-W6JW+7ar0M?S_2*H?HY3%}+GlvL$P;ht!T0}Vk&+nj z=kTZb!rLZPqxn=;#t|>zhaL-mG|jIvLtw0Os$*9*eKU^m9>i{+ZdFRqy1o!?Sku|9 zn7zV7N@h-<*SGgH`cvk0xhwi%G*$2t?=?35>KWDTvmcnYP%*UQ>e;AdJknQ4T{el- z`G=)7cn2K^P3rWdvDz&98tFPak&bItxi=FAIEd7|EdLtUNNtj{a-<6WCvA|q-_k-k z5W*VnZZ9Dgc5g@%Fb=Dh?ZB5$A5jC#kuKjX(#e@a3i+8g4w|&$%7Ya&v^%_LBMrz3 zyz{qQBWGsabzNCG<5`#LVKKc5gXf3;6Nc`|cdkN&+5pmVl>Qj-=D5!m@a_ z3jW+xc;k%4etf$Ms}`btEr;@2?vefZ3$gl+YncV44}87!i*IIjxN7QGlVrmlN%C9e z_nEI#si@91@D~Oj-EC`4cJ*P^k{`}4yB(fpkHY4Ea1J${pR9MQo9-a{>iFVZQ zx|fQ=swFxy<>eBd*c*^;J}%Of>v245l!I1)-^*1r-cTzu8T@g$-MgBsNniV>8an>& zB7Iu)_j+HxP0=@!*V)K>{HM_0*a}K^_$I|8r99gYe$DNqtQ?XpJnDpShrkklLRS>31h=-1#mm4m_bY!`CJX|Hb(N zeQafw3$@Ir6ekz&d`}DecDK=fg3K4$+qw-uK_*8czPKb2AAOrQgWpRKx7xxgTj0f4 zgn!ok3NzTssvXyVz5Mj9_4VPy!!*@B?<2+!L#^(W{`l+FiiXC|hs$g&$St1vw3>7I zDqB_No07T39hWb8VUqmX@#M$7Fm5EX=5}|R`MaoWO81qFpA}=w&zfh)=jQzBTKNu! zW&Wk1sP+?$Ucc#hwy62VIEAgtJmgg#kqesO3m8sAcxIk$uVl$>quV6Ad{A3M*cN5x^zYw^i-s0em=|d zMmg|gaDhK~CcNp>f8S;89IKYCLz|+%1({p8yieR#U6Gx52Rs*Vx55Ss=!y^n?h4=V zQh4Hsh0J9uD+P9ghgls|&(bcV{yooEjIe6itls`_0_ScQ(h?hy4*ja0JriU&Xws?U zyARjU*rGI}e{R-ao2pyW3Amepc^f5QL4{u~^K~}DYTg%}{`W$Q>D{n;>$f!3qbH;M zILJK&bhVX$2mUCe!>_{9JndB_cM?ARh|MeBc)%(lqWivSo-8d}=tJnaN8YO~D)Umh zRIn*e+KVz9;Ba1Eb?+&K- zv=8s2-s1hzz5Q#x1xpOcROa*ORk!@mi^KFlyWdB&dx~4IG@v}FPfxhVLE&|}I`R-y zR!L`8o>kV1`x?r#h}3%?nSTT=r{4AxFeX?6-dL2@ocE3iD}^f4?z9^}p}Q8*qRn#s zIUO9_VY#MiHLr6=Zc8tcq#uza-&uC#*`ZR2)cnQM(swWEdw_npws5c(aKpimx@qX| z^~XZldgM)xsFRYTU&XqA((aQ6j+5#`+T18f+xN-_PKZh_^%uRpbcHp(*3Qjr%<)C*5+~Y*ix;+J_=tyuO)cFl z@cLD_@jI$AS6{C#(^gB!GP|0$zfAsrU9Fi8YKr#&S&k%0mc$&8q z-f_IYa>`A-{qT-U5$|t{bC2@LB4UWQd50Wc+DY%FMBeuJjT7yU_w5YvKI`MNo$s&{ zL-WpkyIZz~^4dEYGo9vbG%4HSf~d^%QoTyEr!;2=$#LM0tXCRGoN}{ z>p$|>919wMIfW_?rX)7&q$F{l*?&hXLwQ7Mo{iXVn~vvbLXd8-5viYb3`;Z00Uip^ zHTdV#L%0f+l|2zh;JY@8{z+_D4Ew6F>KAuX)n3LFfSE4j``7ac8-}~5;U3U$N<0-! z5K0^lPu?nFPn~J|4quhWsvX?2#9gjPk0O1wL!@*67&wbX3>>tB`{l6RP_jiJ-Qg_K zy+gXMWPc70@MG{)gZqAVo{1}E<+?f!_uOsh=imH@&E#0M&8=bZ- zX4eBjsDhI!Y@qPA_ulEr$7r!i*o1H1T-nVA?tDauQ%G%tMEYt>z0M5zaezm`9|a4q z)MVXh-XXyXKMjux75+^Uip#Zd9)2rRc+WOJ zFe|UDlF9rWzURipL0a;Pc~2W@D9q{DAWm8w0ln@>!0fu+N|*&EtR~&sazZVd;R{I5 z=8JUVM^1MvEtG>u&5Lf?7t8+8yhm1RsSlhlR&@GMQ>_?q^Lvgvo*cOkC5KIg|9CM) zWr8Qb10M@dUOKB5Clo97aS{HySomF=hLlNJwa`m@Of=?F%tq?cAI*)H$1M4ps3(CW zN+jURClWBf*`js4yhd2~CHVQL!c**L4y59-!Y{+Uo(X?cIgu7gS*h0~c#>6sYIaZ7 zcd5)U4y#tMyS@LhAjB1+1KEG?9k&?)eQmBL?-A99=h z)mXLA4SNh$yW+1RJ+eWh6-G2?zF0ZHQ{lVpg!fO1F3-0OvBJ~fmmGvYK3d@u{(^;- zl-J$$)=(Xe+eib$McUB%W@EMt;UH3Tu-W!MyCls!v+^tbJRJG-hH;CS zclfk!{-Zgf3~~fSNRCCh0MEK5e8GYat+|DxnJSRq~QXLxUWD&9SMW-&3ZV#pmKFO*1( z;MU!_nw3>baP+S?m*T^1X-~A{YX5kST3jx{`}Aw^UR*qy2ak#Ye+hqT@W9bQj5d@N z{tCW)d7yg0oDEj57%D5Jcnv?bR=EA7C2U_%R!M2j@IS2C#+V2(@5qB5@2uiPSZ!fC zf1P-@4cWhoSH6g$)nfJMcWzMtYoz;aMB3)ZimCMBaG*1^9ByqdeCSBugKT-hs)gvE z9Iv0=)%jQNN`;r{a4sBkF<-q$wStgWTqR`R3mv_f?;)^+G+zLE(kjBZm&{}OB(Y0* z3F-T+bkJ;Bvz>mw{Q6;w^%Bf%qrJa6k)xpD$DO`6MsE*||4B1lH1pkx>az}O$r~6dc{BRVIL>B&vUAz2gP%PreEMIn zNAO`8tP<6%&!%y+7i)={^jxbZ18wj=b3(j7jdnWAvy~W{)WZIfEluTmq&Bf4o$I%y z4sR^sAX4-BRP$Qn6@qRrd~@S8&-3r31sqj4XFo@@fq-sCz~)PrF*B^fa!YT7yPuat zAqflE_n@p&cMr||4HpMy&81MA&_<<+_N4n#mb;aQq%)6xLty(}S_#S>?Vvvpz8XKR zh(g&CaNjivczAAW=3-S?64}9zWeSgq?#gANtXfoir%JzQsQ0k{G6bFP_@+WUw?wPm zyY>X!lOqAEM>%o3tFW9A2Y5=J@OsBu(~(wI31QCs&i=RQQ|7ofBVAb{(u56@d+^;b z9JB(2W!P@fkWc@u1sd9JpZt*^^Gkjss~78okxDb|)$5jyq_tlaq#CfLoqo8^E;^EH z0q=hEiLn}Fo`yf7?&&K(muhExLRD-bpx+t^81rYFPVBlSEPN|G-QcM$HZWdQR#sZJ z!Jlju{Worwn|R+7tA2spbvR@!U6~~qyMJ8+DW{2QZ|*Zu(6te7&d+h%IXfj-nN_Qg z4ku5iK-)=t*GOD`=O{l*3zeQ(Qz!UK7b#GSuWg#Ju@S4pu<|eM=2hx&v8tppyP|8m zEzH#_u5fDIyBfM$^3h~&^c^HgaF--YT=PF*A%#?$v`NB#y))QpMTA;^cUE=gDc)`# z0pWaNh#2B+Rz}a&uNPfxfV;ti1B92{=s$#BBv#srUGTd> z!sEC9^9QTgSf%F6d?UZcg(YjbZg-T`uwss`Mex!#D>AuN>3whxR z2e=nJ#Nf9o_H9T?tPG&M;YY7X=)5h5=%gvDgf{15YyK3k_bjHp`&_TKIfFLd(#mvn zP`yE%2Oo0WyCyjTs@qe1l}VEhX_k0ILzVk>`b$HV`V8(yp?wMHnkfOR&AZxy_p!as$cdJ)fb9`&;`-i#E4v^zOmgHzXyD4pv$|M)sOa0S5VD#xdk}ByeDNN4?Z&RqZzeXI|w=fHwCsf$^NC9WK1f_Ld*-UxcHj^SVWosU1K zd}kmtadONJV|Lv{bKZSAP%BH`@$55#%>Lf+lOgKq97s_vuacs~Z~2SXO%+I!cK@YI zEe(xv|KBD&GvL9UkwF9uB4F|w37F{GzZ`7^Va410_G=I{gY`Rb^#yCw9Jt$-o`Zn9?+(>UH9E#AgsVD~EO&NGmg1}{wu~RiCGHzGmbxE%+B%q4 z=Lp)X`$X&2tlLPwe}{*JH7|{SQ|Aolpu&*e_7LeG6CX`sGX@SER5*Ntzwpipy_^{Y zW7SHQ{mm}p@f&%#bW?D}l0OS>gx6u_s>zXga$~K-{XF9 zVOKA?L~2&upfSv_b`Uy1G+C9|d$Z21jNcKS;0drKx;< z^7L8aUR}Grqm}N~k*sQh%uBd1K6{21tKQO@dcW4eKhU@p&D$jXb-5p^`IWB{$zjE( z$YD*oXwLPM=;yAX3jvd=a~4lf-d9(pykkZN?&0U?lv*oE=d&G*O)zGTu~pkwfyv6({A2CmgRV!HgD+AQ*>uIE! zw?vv7Z&RM$9S)i_cwFCmv`x`Sy|YESs6iave&wJ^M;;0uuc6kCkK#0B`BuwRhO{vR zTy6;%QFV|FWd5QN!ldGjze| zlN@s_dDlIZyu+J2TCod|>{{L_cQVy>=QBu)ibUG?NCEe>av;Q6`1TjV&(0e2J)?T8 z62d%rE1$NACd4_UF(o1$;P)vL0LlS=9{$?k{)eifc<@b9k-q~oTn@KkurG12F*Ui%Guys&a7 zrop|>2#>Eac|L1PSmjX78uoJS-D2j;jW3o?f#z16pFHHb^WM#?0-5ca;!}8Z{VGrBHpvV3a3k`VrbHU zU)t)Z%da)`3uJK!&wUnk2)OH-1gzg7odJsqD*??ZOxH)jk2#`SNKdDW)VAd(Ort3W z_-**Q+rkH)+myyHX|Zyo8SqPYgm0f8^OUg`RtarZb;xHk^$z_>G4ou)^=a!wZEcG;24IyBaGz2cGd< zc!lHdXE7y$l?u5Fzw}CYx2jom#+6m8;c{OtREzVuNWEW+G}Pq=t2N32eh@r&s)RHuf^-TJk|Kh1gLId4qqMYyyw5%JgW+@Ef4}EB=iIq7bLZB~ zJm~%rV*qC5O7Z5VVE{sWhtyM$+O75;hM!=<0lXUg=W7Zv@Z;M}*d+lgcnx@}7V!ht zR^#v{3#>?43*Kx>T(Kpy67=#ph4x*}M6*3?^N}HXF6Upq)U5sRgx|U1nx3_RY_3 z790xSeA$#kBSXqBaOl~^A@Llt>6Xeb7|$!#x`(5b*2X|PlS-1fsTyrLD-U^#H+t8s zJS!ZH45UT*B)xDVdpTBn;Q%fRo>)L!@A%hqcx1u~E(hKyaCg(wXHl`RfXOi z_}6;ku9IT1sfAhTkm5JD_jT`@%#q~kXwlHkK4_(t;r&C=jWqyfefJ?7i@`}vrT)qy zB+k;Pe7+`(<;8ASf0v==D5eSmepI1=8Vc*tv0-7sRl$u_iHDpllfjmLSi#l6!=4i# zc*GOEUS@Tv-|e1YGrxQY-jA*~XmZA+)4 zPsSWDqoWS~#(+Xp^&O9UoLMP^#^UxGvu--5O-S58GvUA}{sE9@?;?yx#A@iV;SBrD z#Vh3aVMIBe`kSM{Wtk|T_{ozt-RZ(E0P#bW$-my!N69td?Qcxpa>L9cB_&u4a82-N z6XLOJe8=F^6R_flUV~dY5Wf?Ad^4U9uyU2M$=c0_kT@z@GFw&XPm3pZu0(Jq=lEUm z342s%u_JP#90wO$;)JkF;M(9XJ`(S?LU|}&m4OvCpaX8^PP|}ugFT*3uu^F8R#U3} zx{u5D+pA?O5LFl6abDydI`#!F3l;;jUwW(*{=|QNzw3g}55P(x#ACRb{ct~xCNu&& zz6g8!ldJ>YpwoxDQW&}St%^E@Rt`b__Xgd2Sz%cTZ_s6~_j*7<#kv~dEhohl)#S%> z)_*fVOfMnk(PJ4{YhjU50fykF5tJ)^_3+W?2f|7r#0uD>azyAfix<$Gv0Lged13@_ znJDtMT$pnkU$;RFI;u`92hWT2gD~@946Sx5Y3&@=V4Tc6NZY8>Q3DGSw`daUG|e%3 zs)rs|dE>JC2$N-Ei9F4M&!VX?L6)X;%JOL5BTQ1VT%7kWQ|}97EOCUk`o}K*QS`9v z!V*-RDFWJNP{8T3IhciFVZq;k2MYY1(nfTAnYFJ<*WP9@_~wzr$8pz^(Q$&AN+7O! zy!qHo=(&l=;nWM^tFxU(E0epdy}{SUKbCs@M2FmBr^A#$tc~f{qS)xd9A#-Jpt9_G z=YV#Il?dzHZ^2v3iOXD8{E2T%z)B&+_lb`wS@1(@Tg!#rsXU#^IMl89Gq(O%AYySf zMU-4H4^K}Pm$aQ`<|;0x8}KZ0+#%N8w1mG~9r@cWevT(Ti-POZ3OuQvxb5Z*-Ecl( z_0Y$AFh2kDIbdB zyhFfTS$Fm%+ES{CHjjm+fZ|QKI@y(f{Lin7-j2tD4ZMrx$a}ovDhCXr5Q8gDWO}48 z8cSP9zrQ5ur3ovh<26<|kW{=cmumdKPa}Sxq+CZTv7x!THIrZay_BAgL!3IUt~e z5HL~y*iN**2#fk~1TQq9L^Uq?Zs@(h%7t**Fy#P3yoWT*l%(C2$F^Y?9~=egCn9 z_t-#=AUIT4a0hqdcVayrVo?NE3L&0s?VEw@!Tt$SB_ERhJMNzlJO<&wWsBQsEp#5l z3rbVFg^lUm;9cWS-Z_PJ8h9-SF*xsAZEFt_61|(2tcp#TcVrGE74PYcFq=~T3{D=jS6I3h zt6=M(4Q$Noi-^r}6!DLJ9;kj6mm-Q%*KUeAD8C=1stF`Lv{f7T8gl^m2M4**w5BHomj`~!<6uwo-bAo%MH;?<`MpG!(GE0?l%ytgY?1=~*^R^?DbeR%?h z;#^&FIrPyzhVAeQLRvE+t%{Y3Hl~-59P_Ec;H~)I0@}%Ut%v=v=NVQCAwKc?4Z)v8 z2M_7fTWl}R9683{e#7Ie_zrE4kGDS3$q2RSSRYBb{PhQFJ_LDfDk$$$mkGE`SavSS zO~cCFDEene4J%0+Ww#~>-B&muL@0Pn9r5}dnwVx`Rth2R3>l)ny$#YZNHZEpy2EK9 z90@8Fr8vnUw8$M|c2ksbL z|DL%3(nv^Unki~h>)naB2GJj@(8>Gd7~mk5b3q3Lh8 z<7aEuox8T3b6omDht1$eBS*wf$}weAKsA2dgG`*%#p6m2+L#zfzsPy83nc1v`bTVN zg##x&Qu+%&0M}a)Eeue^Yv!WD4c2hPB4EKY3aC}Eq!_0SVNs?y@OXLRlb;sU;wMP3 zQX;Y9C)llGpSX;N)LVz7V|5L)vFi#BBsJ?;-+r)Qyc;30ZP@V8?-;xj;2mj5-tUdN z9K)x75raD-Et9mZ97-6zjeQ+Ik$Ibv_pLLtq_EKeF-R&FQ)AO8S9H3QAT_ZesbZ;ofR!uph2^r3sAQdXqMGk0e#VtRBO%<7 zWYz{9ORimXOOud24O!B?Da$}vs~-4{D{|p-P6yWwCVu{pDjkfxVdb(r%;@jQWja+G zDlEK<*N@9T53h5oZI4aak3KVyqavDeY&U*^DNUA%q~iZH$Bzu1#CcCsPS(bbs7!dr zrIL5e#Xe|}Sqx4p^I|Zcd)%Wmev0Xp%=AX8o=#r~PCkFI0@ag+B(Ksa$&pnjQACys zJR7_?o%k5*5RA2%6+8z#GN1T~3(K%F!K}DWa=}w7iT|Z;UW7f{uyTbRx3qzMU?mSy zZDmh(=RTUc%@Xffz=4yVb;#esp+65woInBc;jO7k-ZO%Boo4@e+hz$~0B$Gn|4!V% z0G(M;utM;>m!uyM@C1_y%*ut{XZD)S@fJb)PLHHcFRt9jL@XRQ=}^f(;vp@D^t~ZT z_38{EWey}2@3x);ma%2GuaN3lko3AwupVa2;DEdE8+fw~@xKzT<4MD;be3{rI-W|` z?fbBK-x6pw97vn`kCGOu3?6uBmx90YAilhM*LA#r11ndI2|cz6cUAR?_P+PB}t#}SH zD-OOI-1!^vrOOsMV}~BBT<2cr2v|@}0grf(!%R90%jNDT^Ys;nn&wY1!x7cNJExYs3ww{~j(Z(3!0W-k zHWJ^y-|r+oXAdimv;o|wmH5|ZCvinHD;N5=qaU9^+6ZZpf)~5jbALPjHzp_Hz)7=W zB-xGq1JZ(*B#lnnkG>FdK<~N<{JSyn_j|ub;T>LB={^ZHY*3T#6vo_0Mt%6y>Wx(@%iO-od2IDDa#p#j-FAXIA=(&6f zUL}T=E5+rI<#7lh2We3-Nslf%ip!ljpc0>fe~Kb*wjm`F^MSBZ2(b-#(&g*FTvUw% znd~)Md3ZmMCvSPFVt>r5BL+#ub~P(?3R_21U6*%6dnD}gtr5ufok94!vBq8(NSZz>@^@RNc89vraJ^_BIaq;B^nG10flY)ErJPfQ9TD-1iOquf-=U4~QR6mmbxO@Y1 z^2~uN#iI||UL3l5?)WkenQ8^IpAP6EV52_;d^Th12mG)dVL7R#pME){dXScWCaK!J zcQ`EOz)9mCX|ky=eMmn?lJu#S`C5FV3l5w#Xukh_NDUx;l|<5OT0gO#${aXpf4P*| zkQzeT_JyP?`_9FJ4s#%>_`!rTt)nJEY6NLjCQ0)f9$vuvi*O)m)syyKg~Ic%wV2N` zhSV#MqezF2ymJ3i&fQ{3)n0VD-@x7eJGo!;Zu$e8&=7=^ zny1{ILJ`&VI?A5(XqT{4P@Mf*D9aVA>FAQOT%1;N zlZDXr6z`?AEi-R&Ww||Mh#HkeBcP)!_qz5H9$KR3pARz1xcJBNkN4z){i`|d3u@b( z)pnCmy3gr&M~Rh@^PX{e{x6Weh4fW3Ne55Q#oXByIB-#;qe8ah#07p82r$>BMGjJYbmvC#`vZ%pA{LYe?Uy zkaV1W#uAK1;J_8E#rY<}byL>lR}0h!HT=u=hua{DnieJbtKkMZb}SX=e)FR891bmxxwD%? z!}}c<=CQ=vtMJC`O1gSFt;Te7ao<6n;$Ro;LmlsTZyw+GjLLm`g-HUV>z%*vHh;$-+6LLY9mw<4Pdk6}Ab9N_)j zg1j#jtKw>7F~A+c?F7ExXRkE2D!__o=zH+wccfQTU)hZ5ZdmDfJFN}g=(&SUnL9zN zX+zovE6?O%ngbp<=nvqIw!{rj{4)g`ZeZmOdTc~s1Fi>WNON3C+Wmchq+<@;!R@tm zo6Dhd-BJ#70S9ONcYs5|%@Z}*!T@rp_)(5h)kO3qStdH9*w!BH)iu-VOFFsd9BoH= z_l=+8C|%&*=1=a|66|o4EC{;TuHYXciQ7NR9*PDDRtno`ybyu#pjeI2#Vu<|31&s*xr4thpc3rxk8HO&M(*gcTrO$p_YTDpBNzJZKP+z~Btkrc+yV!+<_ zf9ubwo~j>9#KCwX;HxqU*gR)f2|n$Hut?+u?pQ;7@Q9!2nKCO^rteMO!h=OjbkzP8 zKd<%Q^63sptC=L|AYiaHCpEbat`rf7p@-E3R5!@PZ%2jp`O{!v1?$ zxno#%-Zc{;{2;Y#CFyYYF}T2)1GqnUpuoq?x{te^S-}IqO=W#qBYZ2W4mTmQ;?@oX zkCZ2_SMpK;Et!qVHmk1Tp9W>@;H)a4?^( zrw2o8t4!LJA&!`tVjkcj;99E06}>j%+0Cq&Bl!%TqD_2^yA1~0%*s{9Uunw1;(}PR zU&jxd$Cdy3s15TuG*xBj2@Wl-J?n^b5Q?%Df@z z-kpj#z0856;&;|!Z9go*of;0Qni)wacD;&&VGewows_u)t6Zi#-txJG#Cs>pR_Z$L zya+^$vZ9C=pN!vvemLTC(y4BH_i^avoi_@E#3D|R7;8pIti%~!)of-slI5_a90?2N z$w*4DOyE)Au@1yfeLpb@|2%*dJR02bJ@Kor6EF&7R$OE;;Kd(^8~m-~jvaQeaw!9S z^3DBFPVjztUd35bg2mvxFS-`2 zMH`a(IfdOwX3P#dMJ4!0-6L^IMcuG&tpwJQVWsQ!y?RHF z^}>>K8WdKn^g*g8lDJI6X9T_G&|?XkD;!!fa1CpkQ;^p@mhv7naKshFva?N^sW7z0 zlVP?(0cK2@nM=O-$y8yEM=Z}7{V3M8_=1uY zBvMHnidOsLQxPZ+7f`BLoh?D7L2B@Yq*A>rJ@Dl>IB?RJy(h4ZiRq9=rjykAp6^&Z zli~qh?yu!=~pVr-OYcX6T`}bwk-?1x{`QGQ~*lItXv8ESn187%cs*4Q?#=3#QgF_4kt4pAa`c%U(u!^I$izwink>y8?|G1x*OBz@0Fx2eN(~1TGavk0 z8}XH|x?7+^VC6!T%t$@MA@!`;!bFN%$IjSyQc3*fTmEDldmX<3IU;2J*za_nA7FIDtW@)z1`BPeMf{UAeB2_wLi&x8wZ_pDA!3{^MNIwU{IBRr zBQ96;zA5j#IW*$h#%4lUTiTnUAzzjF6P~m6(+5;~F>)m9Q;z>)ug=AK2r_X2ja`%3 zLjPAttt^D%#9qYHfH{z~vEx(DQFDJ`BcE@O*4vSET>Ys8M1=zvH8ShkDO6_(q&5yD zwf*;(8g!4~fR1}9c$_!!^}k$b!ag!ssX9OUcC>?QJ+260#dfFqQ$ZWt%iwO{NA9bB zj!?iNCW4T=Zdu24;B@%|hEyuiz2Uto``mLm+`R+HJ?hM*SbVexK{#oT(4J$EsRGi( zaFWh_7K2GW=0KUg{_L1QS)6M(lRN$&m(Q_PxJtMeB$0cq+m&*B*#$wstH8gc5HGV2 z#4w*(k?uRVPY&@nve)sp3$ya+_8wB^rvXEz+||Z`Rm1&NF1a6ToApdmf(7A9Ce@nu z2qmb2v_4-bLB^-)c)tk_2vG~}_?37!^MPI{0jylz^qM-AO@!7#s{M_m&#vvpf;Dph zuLsvDA%3Cj%SD*AgB8!{2JnJf;>V6E^}xUsR<3lOOZxE7Xv@*+X`IUcZQq$l)QEt= zFa6ogy8GpFH0~@c_z&<}fftXBLa&2a!JEL}z9N168>4(l31$Uv29Fl_+{A$^u z)I|&U7lEI%l}yLkgO!RR?%kf;aP|SZ3$2jayr$4m%N;OaV-8%kc{ye8;SQuyqL{6~ z{Dk*2J@VEX`UO2+76apeHdZiO;#Y3n%EVp^Sm|=;wEiD`z@5EuAgzlhxgBYposN#j zr({;4(SHdw6OT;0-}o!PUT<3W+bc^7SCTHwr8GbMSy7;sI?Em_1-t@E71!0#_O5 z^Bso@EBH%rhhowP_bpUJpAc4Xb#SY4;9FEd>40ac6F;#{z8-f2tlX(GOP;|FRTok1neI0?03UdHA1<#2g-s11E8@D^G;BUZlV~KCj zDu0L@5LTo#1NTfKer~0t97YVVQc7{JPQ66|+W}w>X-YClPwx2zD~!wmA>M+QW)L_3 zyk-yvf3R|;UbR-K5+N)gmCGgRf;|@KQZNT_OK`n>;^(XCP&#G>w*oKxN_?mLg%{XK z1S?WngJ*stUe#v+mg1R}QiiW@zeFA;Z&ZTx9i+)+Bwc#;^KrbZ0|%0dXS{Y#{5D*k zHju`AC+VSS@48@89uAyz`?ASHxno=ZAV!8m%hx^Li{jfNU~mlu9KT5)y-XGs+z$MC zJ#mwqBag939afap9^9stc*!iM{b>4NUQz~y6Uikdw~D2Auhc*3XfK1#k(7x;3gl5 z=RJG470YI@@{jF7yL-GNRwaIct}5ZvTEz8&f6yoLSMM9ISWko%+#kFugt*n<);8Sgu=YLMI{^GyA#u;+v(Mq}cUXTP z-n;9Ne!X*Y!-T#%UcH(xGb?x~QrSZ_5H%d$E`oQ^i12xM`2{h+Bfzr+{?@1k=Z;y?ibaCwD+RGT{g40T^wGb8 zl?xsG@aP>5?Wi#pCUL~aS%ZN?A0&!GKs_}I_})fe8^^^M;hKS!LWnKXLwkFDE~@{{CSezVSo;b?R+S=A5(26_ zQoxp5Hq7iy?n4ZEnU%6Vo7?_qRLy*1h{=vr zNL&0!8b2rx3pvbzE35v3O~SA+XidBK#TosdQ4`Z?3_tHvHv6f}7erJEqliZ`#xPE3Aar?xN#csW#t#TVa*s;u9)XM zY=x(Sc*&ib-M2fU7Qovtlf1w5&zgzp=Fr!u zYwr>mik}6uR&Mc%N^B!$X0CRXQu-;=g_`rGW0klhV15xND>HxDokKD<_qvd0tYXJB zRrMLK!<e{;$<@0(;I24q;E}3P^*rNjhQc z2wZ~9fu!PXF>2d_UXWHo+N4L)|4vKxL5~y;ob+wq>uhLS#iAOK^p~pn7)~$;PO8~G zla21bLt1D|(v#B)kKj+kZ~(6cuXsy*w2FZTdO)z^j;jGLvLoI@dX721G72jf`iy_< zC=RJgr)i@lu4UfN2AC#7TvS0l_*ZYCoD=iMN=h&*7eZo-&N75(fV4%BZgu;KPIeDCpsm2D zg3G59zjW<2hC<8={u5j$i@4|dVdz{kD|j3D2Z0alZ?qDfQCPvH^{{^NmGsA=|GtUc zvao{7fP0q^|7Solj)qymWx?~yiJ#RwxDfyLgB4s3T&s%spdWM4*=APs`JaIYwGv-G z=n2|HW)<4G#Ey%lVCoFv@XKztKQm0Hgs|et!#zeigteR%r!{e{>a!GFq<{`2c-oE&BaR{}SdBX0UK#tD0MVMQN68Qe&f_`MU0F#pA@+?lwWvxr~R z{CnAaVR=ow!6m%nB#}r30oBwf;J>X$PhgOOu;8lT3D1d}cYS*buiL^3t_H5CPQ3bV zoDwD(V8t!^oN*K4-q!wq;hjrZsbGoQ+v{lcjB|XOxqGZL>%_l+x3dL#%b#I?XJ9e7 z!-|_7#V;h@x`SU!**)ggKB@tYNRXf=WnVL#pFV z(sx_OEyI^b;J`_z_Fn7_sTQPaVIG3BT^}nb;~2CdeHBhpyI;ED!eI{J zI^Z&~#H+UKTZK;(z>3hi;LYj8?JMSB>VjFhW792rU55~QkSb-6G{xOB5c{m)fRm&T zuJM(4uSK^pzr?Iuh`@zQM{?+d?lg9T8o=9E@ZQoR6>B9d2Dl-(efdtbEgB6tAcQrzu0CBPiJ0!k#m6TvsgtiBlw-fY6 z4mhFAN}*NOwzmW&_O0wW>Hukl14$>=>R>$gHypqn!Bd@yZ&ccXx@K1J_u%EO#I15a z-o?)&VFh;rulhvXqAq6zW=LQK{{UX>LHwGs5gIFI1$PFI2qIoTJp`>Wv!du9!BxVD zk1C7Jz+3{XRCIBtu6_^sD`<#aAPtEpY4GU>@mLsv19uKqge}?5p-q!=wK(KGb>tV^ zU9Jcy^MwMgk@&nGD;NmNNk5#PIG01G@29Y(p-=D*6TFu$Jn4-WR1gD4c}u{;Bq|DnVIjvzqj+_A3Ac^ zudm}$CH(%NibHZ6jrktF8@%reXymsd(A$hEmT|IYyo3z!3U%tsR%`EkZK+q!#LBMpSNwgq{gUiN(( z8YRS_Q`~7=^S0=W+c*b7(E8et*1y|rJo=aiSEvcb&2?Pzo5Sbq;Lt*!+3XV{!3gML zPXQJ>2k_6}_Kp;y+u!VGk<5zTbSQYOJ8`L% ze~!lLI;<30JdGPeBu^0%FQLjAhfmYdcbey&&@+^+%7r0fsSib5J7Jh7_Cg^pcsRIq zAn_qhiC6+)RvcUexOy1zhW~aS!aht`DV;cTUY~fO4AMwQ3ld2>e1#E+>2qrqoZt`t4$Ey4(iN3MRU&Ywdoi#D@4`FI3usHcFA zOQNx|!@`0mfIBu2@0NFC0lI#$;^i{3Oo)$RE{QEbIHJY*sTFY0Xq9 ztwzOd4=m0jIWDji@Df$xdE4iqnPFBgM0Iqq5u~Y*Mn5O%p-25O>%<&LDqglxqn@$d z+g~8HctO&(i7QR84hIMDH1L{N#BWzAVt)~{vTu{8!;oT4hM^mzj3p(QnTx&sN|P{; zE!IllQ~(q{^-&HNV)yA3NXSfD0iD+}wkB>40DzJX>MqLhQ2ra|DOh ztQj0jsHEdBMWF{Rg-2PzuJ+Eq!Q~Y;OBcK%#vm!t#>e`4W9i5bBZiEmt$ng zEuj-Hes|7Hwo#c=S)|Oo!=Y>QKib-qv0}V`kSJ!nw(ZyH^ak_b5;3yeB$? z%!(oxu{g=3H<|j&8vK|TRw{;_)ZvHrX_9p6Ab_hk3=DNY0Cah^98F#u| z-0P)qRNo+VEFr1fhMBlqnFDwUcyKxKQC-=x8?z#GDfp{;;-{BRO-4T#RxY&aiwK}SAnq#xD8D8{EtuWci z<=wDTjjdajBd@0t<&B$q935Ad9YwDIw@@ZN=D=d~?UXIQ4G1bB4Ob!QsvT1Q zVlo{L2vG%YszKbN;CGCgnUyQWdG~2-Lg_oC>Y60oJ9se~UFLug)!-?wi5p%qT8y_V zVC6~?xb=KAq&1K#=#cb#_Ae!P+Y1hy^v_Y>CgQHEg;dFaq{WFj*yG3?xPmFJ%`};yqhfFqHkPp&s6E%*cC?&HFNJJwOcd z7Qgs9g7TcD;|TE{;x5JDy@&@ zWMA^uT+mw%pG-y!a2fEJ0OGrv)?JpAU{-Kh@XR3M_4CK5pcSZ;mNEJ&-x@+Hh^zE4gdZDV|&nt{pnBJA$s z|2I?jymBCS;@(AQ6r)UP2pIpJ0{-@Nj3v4Q2+K(WJwhB%rst4;s3GZzDdE^3z#PC| zfalf`e_C{t?GA(${3W;}`_==AD;#=bvRHTkh}Y@kbpfTEO55lm`{aZM(q^bp z+RtseIDsrVO0Ef>t4=&Mx)ftOX5~Wct{l4*Aznk;q)F0w*FrHpz#PD}z+Y(*Pj-5a ztq05st_`lON4zFt0`?d&EABxZa8ncF*RF2)j6Eo@QcCeEw^|<}G~)%2+nbhkqnEN7 zL0xz|n~}FqtS34YEJoiiU3=@n@ZOyaW9NOwBn>mu9noooHejVq5574xpIZM5G5yya zE2e`=UJfDFX^g7=z+Cu>O(*sxbGy)M5Fe$>%{E@^EOgIQ z!>|$_h+zzF7DO=)oF9l2!K@Uc({xAwOOMv04{ZXiRWxZmM!c%S$93UBhap}ImcNb` zMy29)UeYJ4mOI#8nN^cHlsemx&5fHPM{pA5F#PX(7xW#F3H%LsWis(z@*8m-GAn)U z0fwx6GT3-YVp@-x=>R(Ip&fechA_h~7S!U)G9Rw&Rgow8LHvXx@6|a~;718z$RmDV zXur-lVMa_m=+PV2uR^iSQM%d!D&1-KLCx4KjWUA21#he(zFFmd1v-eZqJ6ahS8gD_ zE^hvAbl_m+YAWJT(@_o`eRDdGL*w0|^>KbJ5wNM10)7cCM4QjTQuTDYG1OJ8w9vd* zLF*tN$y&QNh1pmnVje=+)BCIu}AB{=+Q%w@b#T+PXr#A`4cKhQLj`bb1 zRf5)IdT=~GmktlyC^q2v78FA!Lkcq;%u4CR`*YQ$hl$*Q>95LXt-dY1qu-IY)BJyi zV&f=c;2`Y4+iZ#7mL7+RMP}tf4AZ@~44)&hhcw5Xq+4cv4#4Oe4*aF_#$vNDr6-=- z$w$)oy*No{zHa7{MD^;$c9u9GNw_~Hskt^=6N@@X1?~u*5>EX59jRzEtgxc|@4*A2 zh)=9Y{sUW)VWrUGwOfDX$2UlwAZ?2$>G;J#cpNYXt`zUbUr<6_e}L2`k)*N?s9qN@S>+>m7(7TT2FKuPl5eVxFcfAsFUw3Z& zM0`>gK~OE9z*S0#mvtZSg-ae*F0A4C*O8FAK^j^?(v5AK(fel(+(B3`JHk4t?vN%| zlJwtORykO3fdjY)cwiOrO*7X_Lr)1-g!TmYQi@_Xlh?U~u~?Oal?$!>@bRyZdO=#D zK~jAB?xQ3*a0MRJs=zk3dqdi+Nz#I9wE_$o-~jFeZlXhcjlm&wQkfOp7d+jV_?(=m zJS>L5ij;ofpWhO{{p!XVe2ENJu5{C*(kG%x@`qH%nxs2Q-{2|39Qe{DA6~?H2doI= zF9+F;ub!Yx0SK5P1ne2^f%C({f(L?|+fbt5Ni&=!C72aF2t31mZ+E&kE3Al zcTU1FylWbb57xlSm7;3!dw!;@ctwaNr@AH6;J~5g3CV1xBm_CqK2VOYs-_tA-bNr$>f^B$TrKIP7c!oZc+`6*_7!ea@$%aLUe20Ry&17h znDP~`2IV!z{G_ejpHKOx*5GkHyKx6{t9Q(L4z2DJXUGw zkw$c&?{*CBi>($oT<~P@LV+K(?_Yy$DzJj5fJYmXUT)2Rzp(5HYhMF=AOVJSD>B@6 zIJgI6d6>Ckn3_upXHYDei{&8xItiCG;=4xkruE_5-10}6!hEV&iTj3L6#BFxTH2-H zZ?pqnP`K~DRJe`lBNNfup@>|C4>NoL=ls9^zigzak=u0K5Wc4Rqxch2v><% zeHZ%)7B$D`O_oCw%h{MVi zK-os?IznVKX$(n!A0A?ejhS!&&jF8#B|hM!es^p_h83-5F1S@9@qQDmim;g(R<0Tb zEw@YIvKikEx98A6_alxRDw^uZhTnO}k)A|3Ry~rn#Z`+;IM4au+UdmaeVc_{uguEj z?w7vcZ!YS#5c7I=4Hv-uZ6UdrR5hkyqa1>eR=mactF&GqBu<3>DQ##$D0XdoTU`D; zES*a-=g6b}9CCU4qz{MAeKY5u>yx(iV5h7Qh4cPOh5Oj`I!+}kBIi9ltd>22iy*Zr zA!)kL9-K1ffD5@8ys46Sqm%U^{51(yx{y1)iQsWiQI^7rtAL5ts>0;2cw-$uP&x&L z`ih9(>nP$^gC|)1WO2z`yhNq6Ugn}u-ypSYAnCO;P3R0V2k;W`;vd8ld-$TW%&g$0 z;HoXe2RcjQAea^BxC}f`F@`;T3j9Z(#O_d7xq5J1Vc3&HhEr#;UTrzNt(3|8O_#u6 z^d}JmyaK#l;KBNXPGQ^!D-N&{{DT_lAMLvIFZw;Oa-rKiTv*q$3euqGB%S4BxCGxK zg99gRnm_3eWcv{`V^zl;0B7p%oIc1hPwLCvA%TDzQ%Ms z8@*h%@wadG#}fm&?2_M%d^vR1vuPuTzK)s8j{@`747tgve5Tp3Z*10}zzPObU{8N3 z%;>RVbJB?+XY0`D)w23ACaJXB!nN4$3kQ;l*UH#Y`}jqQabFvSVWN2P9oaa2D{8S0 z0V9Nf)BCBM#>O6mMGI69?r%zo)HTm;z=v&Nr9|RwJZ^0FrCjdlwI}#z@aCVl_=n7u zRXJ?UtN}UltSN`$s>_vFjzcEyxW7J{cn-yEgjC&zq_c|S)v-An4k+di@DLy3y8>G< z`^~Ieh+FrzSaHQX`N-!t4z+ovuWj?!GRpHyBQUqew^+Lcv9Gb>3jm1Ia(q#O2y zpgd@lTEI&}i9eRA3CDsCto+k;UDTUi6jm(H31{tJIaGY{=rmktt%w+tM-ji@E0~H` zyAhY9V&`r4(q#__H7#s!vwg?@s3as-L$CdtGVsTVp9ol9K>@G&W?;>Ug{2}s)9ttg zm)Z^JMXXBPiu2U>_YAI#I~QmOiN!4a%wDoLiQAB+vWl`CQ!a|cSIUqJbM?{&xK3J# zxAt7?hy5(Da#7zepCH^fVpN|62ZwNnbMF1TF@(hHWZRmj`~bI2`6OFFltJ2JA+3t- zyEgot2+6sC-Nzgeo_u23!?Mo#I0v%uF8N7?PPy|m0v~Ze49;7Bo!lr69VyXLBxKj| ztJ`6`UJWZ3BF)*FZ(-MO zv-U((MR>Og-lk)x^v9$iV&J%xz#X(G>XL{L7)&wi|GSQyPF&?O9s4wm4W55YDYW>0;xa$%i9y?;25rtq z(!PFca~*dkJh)<%{g~85NW3vm%9qX{B(}CQmrqyYRHhfZf8@~a9eem5?~`wKMXV^# zQ554(RFvF@p*T!dAaWPa^oGkJf=5ZN#`iKiT}II<)1Uq+K&j zPC-(Fd2s2r4L`CB(pQk?dXcp6o|9-bnFA-ixS*RVN~Qs+mp4f>{~Y-pYuj)@2u<(+ zAL3HF53v`ES-B8tx_Kipar~Nvh#{%o6RA*6ZSdG+;(>X2mn9{bl?yT9x|cGZ89I<^ zrjxYGACEBc${aXp=B((=RP?t=9rgd`z%ZdV<<+sE_rZM1Ue@!{MM&pD3aPu!6th+= zFc(s}ye^(Xc4~6eua^k-k9Z+w^!+6CEkraRsC63`?9lwF+c}h-PVsF76E~aYgDyFHG{a^n)42^ zy^f~vF4H7$(=KM{gRvN#bi!Y~Q&F#PAT81*>5^mL(EKw8gfIio)h8~w>Xr&xT3ERd zZ^VM~1P4xfz}Z5XLvt0oyhH)4;2myH-cpMmVzHFP0JmmQ1wP5w z(;xRetl;m!{T)bubCHR>qy)2~6gJ=mPQ;f_y5NHs-(jVc;tMWKg_-vW1uSdtVa-=L z`w&rWMenp2JB-p<3~)PeZ)b|yGwUC$r!gzIJ-Et8;^Qy9LMfOP+yOj5;KyFQ--Wdw zSkXE-f@}Mb{$c)}R&@Z@24&O3V*tRmCH0ovY#_LL?0kE4kD>cOSLtoEa1RNPd?HXrW?eD z0w3J_!GEC4)NhxLAY|5 zl`6K=Ebl0j;lkH9JN=wFTyj4@dokH^0^gMG8UN4~+1-$(TF4T~7L6x%hP)tl%Et0Y$|3EIo+P8MA_Wf>#w258SP_1D_Cu71y&Dcwja0dnqG&;CTWo zS3zSOrwD^A@l5DP4cLyT-te}mBk$|Qk#U$dLJV*paFZtDx=pi>Vjm`~I32#=($ev) z&5X5JvH&eNtlXurQ)e|>3iN|iPllv()1*-C%mLgV{I$SmoA}_;XIAh4@Mj97KNvk4 z2hObEf#BZ-u63ju709e8N)UL`3({}TkHmp9D_0cPl_SzoN5POfX_55U*c;37_a-=S zb+rG`0AcViURRG|W}Za>Lg3vXc)vN;7d6jffPV(JGoYw%6=rY2ybG-0q2Q|K#9Ie@ zM&lzau%Z-U;Hgf;wbkoPF)D$TD}{`Gj|to{oO}H1Ke!3Q;r+#hycKocVa9;P;Jp7x zynm1LK6$A2B!>>Hz0D@6A`sBYjRIEmd51Y478b>f1lRN=e&oDu243rfl}j`_U@~8F zkL9yV(3gyYx3xEUkN>h5Rn211P1R}t|)bU-Q!v0D|j-vLOJmnD*MpuU{>~qMG6eoatW*vnL2mCAoL|*recT(=kwQS z8A9S|pFDeyKBxL@5X^6`aBFbqAD9pBzmX+Jv4-1xorGx>5iRrd>&vOEFMXMfZ+)er zyx)|myvnj?aUiVJ{DWfglh6P1*LlqCw}1Ct-TMptlhw(;ZC)1qS(N{6vyc6`gDy5~ zv+o<*JC!RyL-nmt)MOe0Bx+EAt3D0b2*|>Kr-Pel65lRy+7;6-u!3iR2MT<1;T%*j zvw~-W`@AN-i?I(D378c;3*1+S_^Am2e@RL(E1H6AaQ}D2wKV?m!bj<0WM;*MoDXj9 zM7*@0BZjTa%B8$lV!50{YYzS<+`Hl_4)`;W{c)`T0l$5sfD0eaKtL9j^OjwdRe>@U zLfYy^(lNVxjgXXJ4&X)L1zyDeJQRTm6=p@~V(@Z*;^Dn6VOYYf6k5ErU+fzZh7eyN zZ3!f4&+QU8dCUPV=r{1fNaFsjk1&vBR=To2rgVJb!PK^^8GHG)1Y)NzBtACwu?AjF zgbSB1^xhS|V`rhYaWUUqPV3^$H(9Gk=kUV>nWc(+2mPXP(ncJ5DT>mTK}Att^4}`< zn0(Cl|K!pJYv9n!AXUgD>G{Q@u3`on4mk93@XB1`iTV?MV4oGNRL)Mluj$i$<|0M~ zv_W~KJ+i6rCt4$TU~0M&Jo_7QoyGQ;a%5KSF4J@tpM=Y*xgO<4`zQb&Bkq3h_lGbeaF>-%WR0(z zhczaISrE>Bg>&074o#V5D$Foj?reWJ_A`igA{7>tCAO{GzG<|??OVrhagIi1<@{y! z;eh5BPBqY_tq+d57KM8+6z)pweH(OsQA9KWb>O9nROq&SLojK=tQ0~Vv?+T0Hj<0F zc6qTJhYl}k{SOywJp#T`qkw-tG{&SH3rkY*{FnVTlnvn;Agxs==}+DL4{=Mw0q3C+ zyi$j_?8$czu!RyI{?BRhCAc!D|c zaVLkNlgq5As21>aOX44$_t;~53#?qBt~@FB!`QWz9g;gq^JOF#Vd)kQoOJw?C}I17 zsd~p}x$MH{2oukK9UlVzwO4&DlK(`+9B+!abK#Wh_=z6kQbh5zYai8K!dk*MXdC=V z`)uNvWPBDD9;6lTf%u><(>e51y5@Hdect%+C5PJ7y^}a(a@V$knx;;3q#^h8&Y&)( z4Y8Rnh>GHBdH_qLtU%y0;2(mCuX&#>hu`?XiYrML+%1y$$j!YmkYH9WUHYu}6&#B1 zJAt(ma`4uSBJb@oJ+SV|Vt_vbuMv1pi4ZpEffZaHJUy25KW?fe;rRk9N}&KAoJ?G0 zXjnD=*$69_^1b67R}O7Vy#5gEzunp%lGM7K5bXyG;pg>SL+OI$fzF*Us9+ zMSNJ4p@?!SA!3LS@s3>hYRozyF8b}t;3YYfY2NtmC_l4O2=UgHdYP6*NZb%JeZL_; zZxCzPEtXVv9T#4yTRA_Ck=B12dl^FoX?1fcZU6L?p?FCH$@}i^tqPu4NL=EnX+M0M z09HE6PJa*RrSrv}Sf_tG%{}C1OxeXZTO)SOYeXtFglrT-1}p!ri!b{jFdl8s!Cguy zmDr43O^Nzd!ThtJ5gsNjPtH@DAMGF*%BF78lXeg%~c|C{Xoi>(< z%ke1qgdyiGoBi({4lSMe<`2&CVE?!iST}l!98C?ByL-wt^#L6t58yKPT=v z!GgZ71aG@G@^;8uyB0g85QC&*9bGaCFhlt@AvIMKI(}Gk>jWT6qUeH2o4F{5n*Sg~9 zeL@Q+q7imSQ@Mb~nW(yE>Q{Nvd(N?|v=b>Qu)N#0UE z3r^zgEyUowcU%ov$e|+!@)vP1y6}$CChtow4>1kSVvtlUd0vC0CFeamp+1>IIZ{X1 zs*4^1Ht15oHmgKzvteOLs*WUWj)?1SH`1D2$yO{?Uc68L>wS>g- zC`h#);n33qyE8d7=k(p}gyJu@=k4z|u!4|y_4sYl(BaUktn7~*I=BC|@Qe}*v29&O z0jJ8#dz671Fu+mezoVmaFkFpwcXn)?^!V(fmN<8Ykeb?)bdbX@XrP$`Cyi74-)k9S z?s2oj3vlj?SoJxPcW(6$1MD_M49jG)BPhE);Oo z#PtqXi$quoD071wM;+s&nrU)3|K>;(C_s6Oz3(J+T`-TgrAbkUAwjW7TzF$Pk!yGti zqRIBhXuQlIO${XJ=);Z9*b4v$aC2~lVB&LE@9c)Him>9a-hx}j5Z|lXh||Wb++m%S z)!#};octfS>g8KP0hima$Y}>9*Wx;`K)`@_3g~tH9k%YUuv}Snt{>zFL;LQI8HdM% zCA@3W$=hdU@G-m=ff$_k)1%GfIHVAsokU1HZ3Ws^(Hu%1@R)rR$_hDNXHgDmtvVgN zhlos^bZmJz>uFg-nw(G48Pb#2VH*`3aFFl7tBQ#C`+YbDhs?@_*smKpo3pjdk_+z zLtFeCqPXP8CrdBEA=x3IX$=Lus+x~kVip$M9{h7H@pWf3uVAhRR&WRK=0@U87gtTi zDh8~mMMvAHA60J7~aHzl}j0V!0k4q?;&jvq^)yO6Hr@l;G~(eByw0g>IAK$ zJcT{xJ0up9*zn-A>JxnV4w=5M+agklwUV@ItJ`t}%iGG6)Vl?&vN0q8XN0mFyFC6zej*ZTEr>^Q> zN4$iMO0H7v_mrW;ogLg^{an&rxca3xwW|)PJJxcgD_Z*pTWxhl-d1JG>r$PFMB z3*Vu4#H>`8otD+ix|due)@k?d#GB93(Zsm1V|OM0{197Xw0MZZ9lL#P%{D^XXWA?I zU%7|;=zH_OTZJ(_D&>C@6c<}Av5mX#$dUDlavblcgtD_t;2z*Pp2Xuu6r#0dR&Y;n zYcJwkPT4%g>*=t9dx3lU6Mq@bzNE&i;NIZ10*~7=Dj&b9gcWz154dv(=~uY+$4HM^ zx$4!({+59dzK|-1k@Tp#WR9c+a{%`PFBbU5^Iv-5Ee2S@{lTLmNq^yX0WM)?1rGpM zO(gz#t-&BH55Ni@2yT-}{A+mEuXt}AR`4M3RDs{`d)xzionb}MgTY&}NiQY+Xs4tE zvvNhB^KI@lgb0B&I-jKSGge2SqX!4@&)@+C#J5b3#xygtB6KJVT})i_$%n0|MOeAe z!>bHb5h4sylPZ!bKg!sQ4@JNMJRH2VhPbCmU$y}UR`3Y$R)NRfRK#o`vw}y0e{LXs z%eLlz1$gEsZ?!WdFhK*t~Vk|$zj8tM<)~4CD4~{Jw0i9)1 zSTk&@y<{w|G=${>4x99CFv=7IX_OpE=hn3D#qJF_fX9NzDiQx%wG>?gW<}^Y@E6L& z2fsDT#KIP=T4E#=0MW79luptc0E~`sTL3G3hByMlt4HNdviW*1(Z?PqQ@^Ng=oDx?v1Bt7@X?+5Vh zZa9E{0k^g%ek`)`7Jh65D|i}slLPVAU!B026=T12@H7wNwe#~F@%)38S~63)j=q6` z(l%jiAzlvu_2|M@>oee9FLEnT#ms@LvI8Tk^ikFv zNP}ZZdieAKESxe2PCE9^l|&Bho&A>?%9;!BLc#mmd?$Tu6hsU}%>%biqNqhZ6u0B? z04o<_^Fs|&4((BRorkFT@YYQx?^z~FxaL_5@B(m$RN}WI-tsuT_UQq*jQ?P=UfM*L__J>SgNeO1f^R5&;=m+U1?Hz+FlUcc=@78lv99Qat zI`j5&s(YE${W#>{Ub7X=S{ZV7 zSoJKGHEXXlHsfi)!gA8d?yFvK$Yrd>NK{1yyd&kw`^|w7|4C8|oUKamTxH@P3*7PS zVO9zuo~?Zqf$ZgtDoC4ENoqA=CuTR91DDOc+pH)^zeB3}lB9oH{y7OBNP+_=y?rEX z6Ar5yQg3aN?r=C5jJbX|kTkDjMxo!gTz)hX)T$qWaYGHfgN?}h@f(|^c!?S@gkFwy z$9{$`>w@~D3TmNk5VXgS54ebp{_p^=1D7|a7$YLBu*lA=Xm{$t;~j|G{JumF-wJ`1 zVyC_6h+Pu;s)4Jn@HAaEbJGC#Vi$5xdhrw;9u|bFgKsB(7mihY0PLL5gB7+B-iof| zoqD#+M^b{tz@_^GTsxR}@+yK98(J)Q;0kDA<%}jC zc2ySZ*v!h6b7g@pTkUCuR4bOGW-k|G?v**<4*Cghkw84IB zLp2(3Y80p1Qq+GB%G8E{nyC~pX5|WROave-NyTeD!lUn5oIGhGj7Kv_IN1kF1f zIO(Rx$%6jXXEjbO{5YFv?=daDWTU3+Ru%hRPiGY zEwK-(=NwCil)d55#eKv1ld67OPabDV9_6k1N#zar{2pJAW2NT2FI4{TkGT3X+e`A; zJ>&n#y6U*BvaYKmD#O?{V=LyEV|RDAV~sI(J398Llqgc7hyjvoeckQ*;-se2$o_p$^M_jO{3GeS$Q$(jaGNywY4#+}-yuXh8K`p2- z?Sp1|4b&WMqE7iG|-=Z}hUM)~>JtC^-#c9~_ z6Ap~JPv3yQCPJV5O-!DFb|AMP=y&Pj?}_jj{CsTv7%rOQpZ*U)w>w32O8cqHb9k+zGopa3HE&4aWD^ z-$RFG0IG&NQCBT-*?|jZ;XrM^$^5tQ*PpsW_7=Eyp2VG;+^IP>E#bj3XutFNZlxQ| z6>o!kE10u$&@)3cJLhZ4<`^!ut`tee214Q>iz0cZ3E}cb2#Oc;d&QRU{{>gU~?36h&ncppCr zlG~lqp`-`QF)8||lk_V#`3Nid-1L1IdOb#5?OPN#VB&d9?L~Cv?wr@ffFL=@TH99A zSWZqQY4tdn)D)JF{|!E!x>yxTjH8cIyea{Ht;~r zx&YU5B>YLqUzltPD=Tp3VimsNU}FE!u_s4xepk3AQ|_#Lxkm--RqVPOX}!MRo?2K z?q43oSpADyh;3Xq#JKT>Vx0P8`v|N9AQGc?>wTBUIN$$&e+nTtyvz*~hvUg|hhSwS z2_D~Hj^klMmL;8ZuUiqS%|pbFCF)h*#W%@!vwId+?L>4^Y%+Gp(ea97X%FgaQb~}!F`KrzV;vf{Hx&IplcMIH&ULu9 z6S}0>u6sLRFgIx=z#E7J7GDfI+}HSWBOi+k1^9g9E0 zYF?wTeOoPFhg0$hPE=WN**HyQ7WSN^o^Fj-tT<60b!T-h^w8om7j<8)0PBTj5q&SgFuW7JRyYKh%q4-!J~r3ZCrBErI(RxK{^}`s#TF z`bk9fcQ?zxE)X0T)uy^`IueTm^+qaDPdYcez~30c0Z(o`aI0*>M@@|Cj89@=WfC)w z8uMBD?B14r#BIL`aJR@O_e+sI?eL)yM0kxqi3zJ=lCvYbS~KY1Z{MX}S$+bG+=BT7 z<2vY`2Xh=!IXr|xhXeEuqJ9#QU3MX5H*!q?UaKNUM*USM@Rm43oCI!M9dRdRIHKBx z2jlLusdQkFSHh0IRNgG(#=nT@9(aeZgjx+gD|N7P;S@FEq-{7EI&N}M3^J0DN_9P@ z(lE7s4}7wXgwVWGfNQ9yi_YD5@}6cm#|A3}|7_7XGte1~U966sepZxa2ivJ_LZ6ok z_jd;5es}u|?CA&*qRJbA`roD=B}iVQ37D$8kqP#i(DgNg((e0zLF#FU5pbJg6kPpt z6TXf>B;e`59qthBIOzojV!{gi9q=Lv4_s%k1m6R}ie~v9xScWaS9$ewP*xCD7Seh6 zztVg|ej6y8#wYaTO9|foB6Ru_L^v$M1M+3M=p&;FV5*B|hsVn3P~t0_&oJChAj7B3&RA^{X3~&bS?GQfX_Z=rDqjv>!&o0%j{ZuJ{BwL+ zJ^d$^&&n>U_X*1U>&N>r@TC&(yW%=Hrid#-i;$f`7G>u=aCo+|g2<7@ovAZnGJ`HE zMV(~Ou$wo|6D0REtKYVhdS|&<*MAM?9d?iFJyMxt?4tJh3_5Udh4gI7@~0~o-C;>w zsxFCTj^8|wi;wJ!QP2;$R8XVSMIUhJ6~)Eyy9D@~e8S_WYGJl5th{l2p0L&g8ehP5 zDIji#@t?6#BRtSOl>!elcqe+|sDT?gqJhE6(im56>qSuNjvqfuT~WK|O8K}h5ANCb z$i3U}-WVka5$1k+`Vr~x@bt_Y`}Q^?D*2nP*`8Z`(fDqf-gYK-D4?0tt;=;8w{!)6 z6-G}g$sQBvy%R8j|ZYiz8G z^5RFR03K*Y__6U~l}cE7H?u9_mpNkfyAtG^E<`qWc8eCOe0p(e zzv@4%JZ@LN-)2xt*X;o$)?_}HW!X-8@Z>W7?XBd4U%m>ty!W77Gza@1biD8c_WT-26G=ea87Qf-5hSl1cQUa`V9?|zEyRJA?-2BeCqd&6M~bn-16lO*wZJ`7 z2(L&PnyaiJtRx}#f_uIns|2+URQoid+QtXF<3tS{SWfp1;%!mG^`JidKve7YnsbyD zgaf0l`YDMwp`qVKiSv#P@V+H^pRn$99(Q*`1C^p;ilZkvq#_J zr{&gj4C>x*fDME09sc(fgR<_8k)9;^dB|Gbd?o5t4f(z+qkIpiw>HKK8?t8J4I{5e z^(uSsSkg!Qm#sRyJ*&yvX7zk5rwI+_{kLVE^vKHIm*W2rM-w#Q{qh@m-@j6UZd7RC zSGfw@rzy}?GvOHA+v6OZSw^Wm?i{uRo;v4zV))3 z*nShT^nkfKcm46B4vGld%oH8$oj0-4>|Z!YiYtHl)o^r|n4w)mkP0ctF17cVp@~qa zqwByQYEbZV^INB3rxI3Dl_#)!dyehQ0zDgcyc1Nl;B6;)=Ol?g)e{=PZvYRuMyf#- zS8Q;hEUZ}W(gtp!Pk6@QO}@B>3sxqbW!ZiJLGm75-M$#ULojR6fnvD< zDO#n4VrN$9Qsp&S?sDkyVg-v5pm_X*n3(Cpzu1)gr%y<#!aq_$g}Cw`0*&joS^CEA zi@eHrYRWk-X{CQ|9gA|f``!)=YWLJWlRIQor?=) zXLP@MJ^p_LIWlk0(f@Cg`R&WMx6qm1gm?B+^1d)GG9Ke1XpncNbWO#=9t!^cff{H$ z2B3a)BkKN%%g{*)2RwMUfR}p`zIOhEC)gQ=l_cbHFR++?ljSsfW*=!mM}ETNhguJ5N4XR!wW4;Fmr=>PYve))Zp4d=Ztp;_@C6BOQ2dTpy^v*s+yBg&&7hC!*1Y+gzI9Pr7?%q;?4C+6D%}V% z@OD~PUla9Imzfy) z3J0b-tvdfB+RS}WBO;0VJ@LVGEaJm~QOo~T-^v1wP|FdgF&@CXLh=r{un-p$2@P>Z zz!(PaSdzWi`yv*Eg?U)#PQNHRP3hEX*O4>3PMz(caK87F|CsRoe0APsj^B7hnm)<3 zHy}A?9CQ3M@`1D=EVHgp-RZ|zPfkpHPLSLnUoU=l0v(?TGJcps86OP)wGXbrM&8W( z(2|bQYGjk4VzSRkUbTt2t^826522Xwjugvp*kQFn=yJua{dv`%DcmV$(x&iM%Ovk5 zOFFCLI1x0^D$RgfekA-#-F$N#Q-qZj$@%w8X;WV=N_J{KoTtU=9@sOw(Mc#MBsfrFBEb442%u00@) zR>RNYkg_oI7wp@^=@$uW@`emPq3O$FUH#jg@51|beKwu3cIv81H#yk4xB5}+UzfM` zMvwg%$rwGPWL9+g6YI$$B?{bh3BKK8dvI;RwKgZN;ZNcpafFA|yGJz6TMqQjrYjx6 z4YnZe%NVDnxC;;-VlHhD!xvXFgk2x2jok>CDPQ?F9-0u|k|4Pygm$|m4Z+>d|0uz( zL5A^+wcaAUj3>Wlrm7~ZkL+EC_=9~Xpvz9iN?n?%!k|yiSIZexVRM@I2>#orf~8X@PDks zcX6FMDJcejYOM0_=8L5iRu)ZNp;{Wv$v<>* z|BcdbBSSr3xa=oK8Cv=K6aJ3L?_)GpDFk0VBJQ1JirZP$f0nX>h|b(!)g`p0T5R%k z`QCdWjrlC+{b*sY!}InMt;zdi$eH2N@`FlYP+TrI?@7XD?0|pe#)A>wl{TGw5ylRVN0WGcldZAg{cX9aOF+ z_o2KGP8WN-ZsONWrMP}+z3_O7=;-*|f$M!B{MhDavG|x6Rwi2$vP@j->jCP^Y@+V! zW@(D$A2<+I{{7yyTwH_~mnW!3ABlS0@#GB5mEgcsd!CtL#=OTTviWsT|QaUMD+T$z(BJp3<+0?lmbI-l7CYNZLFBN|@h|-gJmW=kLbcpzP?HQtc zl%mY7-GCwXF2n-v4g5hNMNc^A*9Du(uqr)luIK~9O|?w%Mr_zyh&>NsCT;mI4fG41 z{6r}f$ahQM>+ABGX!4p(^?2h-qBR+07hd`K4bkL2A@HAVe0C9g-HVR^6bDw7VR+?> z^a6A!z5Q6lQnsY+AVUI+P(Z+A2lmY#JtiEiWQQg;uIsCFBiH@ z@o;SG3sjOO4Kwn3%eI))`@_BN9wjuS{ugYM2oYAopm-Zkg5=<{%0i`sOido))`b@r zvB0kk4EAEY5P%?&78K;fj4aHiMJS@mBY|1YnbJ0v`~yt6vL%xVR%SoiiE0dlpuH^# z>RPA{!-5lJ8CCOgw*ge>CU0C*!#BMcZTxPhI5emrD5~0#;s@O&LzNYTE?&;hftT77 zzUl6|U+{S{tR&lHUOR8FaT3OI!Qhs-68Fog3H@-!4jvRvuDJD}Yns?VB`W%zs&R+5n0V2jusBS^di^@|%(ha?_#$44G;03Hh5 z#GCNxZTe#EL0Eym0v`WAJkh=d=JBwKS7sOt_Akj{{g93L3TZmbyfSYTe9~i;X}s2y z??oN|q{Ance=YASEr!ZHcJIome1L58s2%TykIo%_9cjNtc6XyFyR=oea0W``2s|A4 z^*F+{uX#QgZ$ z7gpd=z^gI|S8DHSkDGsC1^yOzU=HDfyV$(mGBK_ zZ8en@gca>47Pv_P>8S253&scrR;pq7nQ$DYGL0a4Z_c$qaUfLV;H_Fr-ivf6Vrf@s z0FM{=H^Sey7`GNTUcw4I0eE0N;cw?;)+s9pEAT|%Mk*gf588FF-fQep!iwyYfQM@l zK5WPKcDThER+e3W@pC?HZKZzb9bQSv@b)$&@0@>^rs6~hG{{?S#q0CNDKKcIb@Cj7 zJJQe?^gLP+rR zn7WO4)FF#1eg`}*mhfFy;*0TB2dt86<3AniYW^!N=g6v?jycvt^*y{xvcp%qy9 z5gNcVfY&Av-f~v6Y03)1ijE}{xIvZ_ZKLKRWd&iSXmWS;@6H@?aPb4EFC^--yGEsu zh6C^{;Of~VQL#@0zpAhT&j#+3M|gSJ#+TTUfE9QS@ZwK|w`)5OV{~B!o(nvvi15IK zbj-Ac6?h)-h*H9>)M|gj`3G20Q6GWF*AhPU&R}eU3oEOB&70Zg47%JkQ5^-(hj*lU zmT2KFF1t|8LW5EN%AF_1AD=)?m#CID|MXQR2Q=pb;N{vRVg2i%mG~A8RwnVrQHxJ> zBHF%@W*+j7H^VKIJN`Bg*APrsEJO_R+Y}?O{`7L}wjdJ4kbj>eXCnCWsrrJ7YGnQy z-Y<;FyR6%24}2yJ4d6w^IovBoO9{f zpH-pn<$w4S(W0S-(x{n+Qp3_6fi)enWNhPO!sd7H=gG{iv`XkcXWRj5W0?$V}De{8|R zO1<4PdD%e0amq|g8f(B!NFr`R!lryQV|cJ+&-H98JwkH+Tbs9UV5|-4&U|iLx9yT4 zOFdU3ybyKt4PnjFDC~rUk5@4mM{p*X6tA!Yee8EoZ{!j6%JDR1Wd-5DsLpfBc>kmu zwQD+y-DAug71n*aH*04)~JLmQRNrTd4KyH)NmcBkG>GKOy%oboFaw;@Ot2W z60X>KcL*L8STXu+0REtc_&s9Aea4s>R{oxO`)?QNWhTG7RrcHR0kT?)v(wQ+RLt-> zUp*;~)QcO1tFNHT%5_x#@IwYoUYE8It>R%Tmx=mNVxNcQ+THfD=WxP zKIYRwy$)*3U83sW+;;^hUEsi|7s8^{(Au;>tu!U-zLlzU%WG+BDY zVx{wg{WITG{>(Z9Ed6pKlOUP%0R9+L4DvwRPFg*Z}810 z9Do}Dx0dkPH%A3v@C_^Gt+#-u`xAf1iCq{X2rE5AUyT}<;0}*y$7g_D`~NZzvbW*x z@|@gzk8(jFga|S=1RfSlc&AL?FdQL)l@-pQOK1dY@eZh3uZUW$IDLY$f^ZrlS zxJVl5$%iW~oN6W@0V8<3y(aJM7A6>i2o2zOffq@*M*r*xOxIvl`i8%#f*~TA9R3*H z`Z{icfth92U}oyWGT3`jo9_qIR<17n@_Hwr~@Op(e5DV2V9uezc4K|&%&GZ=2y zQjYBoIP}6+ILwq|lPwE}Vjq4i#LfBQLJB2U^7hS@d`)%t1^1aOp^D?-(yUJY!LrQX ziSrxgNF_!!N4%u|={X7=xk!k4U+Q#b41+$HeyG7K*8<*e^vPSzy?Yyc0|N~zNR#^r zuXMT4hPf~5`;s?}QHeYHh(9H?gycg*lALDW-V2w`K$zU+LLY1wV#gGh^fcxp!lFsF ze=^pPQ|bJH>7!o4*I;KJh%&i8#x)oJsD*r(pyQ2mofxz{?!kGC10TV= z@-BIsPEy7Sp3vaWmV#dAFueDy!8J4{uCCh~tm_C5l9kJxXJ&DUL3&ynAF<#c-|z58 za2p6#NP=t1wqkQv$Wrhot8Uq*9ao~qe++JpDFtu+=`V1F2T!y*-Iym7@@nxWtW?^< zy~LW_w^{Y-f+rRtEYW{mQ}aks&8zXWsL#R=2UzmD>9N-dQfd4n!8WI~wGqS)LA+ck z$do0`F&Gk|NU=#f^QwI&Jsol*Kewo!ualQeGnF1InWY_l=`S<`auP%?aLt z0i^mV<;f6b1);&bU7oxV|263h>Klo=L)RY*Q^J9$a`QMB)O`eUbpbUsm{co*^n>vJ zg##p9fxmb~c-o!4*sm8>l8{F?^NJkTL*faj_ri#(-*D`2EZ4yS_*3B5UK8Fi#&ZD% zXRrcy1D+<~M^3Cgh1njgz}U7{1GGK z2E~~5zH1f=gGh|3n$hbMe&zsBvn1-;OYg8UARHhO2wdHOB>o&+gH2&!WfHSrOcxSC zpcYEhVbSXc;A1~H0DlfV!H^^}`qbgN0AWS_1q08wA^dMm-}g9&2rH95(&69}g5*kR z2wS`oFOV1TzGF|`I|7F+!X1LpVAO*KYi$`cYQI(pi_!h=S8?zv1cIO3NYK2Y_ek_3 zkR_@-Z}~HSf%H0*f8h?JO2iEPCA?pFkav!y%_XdXKm&Lv@MsBl%)Pt?E5WcL+AH9y z&xt>)dm$FHgq7ub;ry?@EZ4jPOT{u&7`($J?-X}Ecnb|w%4^^^6G$~^S|7AtVI>JU zVe_+pbz!Q_&l~h*vG>f*@j#$(2);}v!G{{_FgFsiXciH`(^3d`bJIW|VPz5>Hbwr0 z0n-~$YjcQNRyPq-Z{fhGU6*c_w(FbRByb_69q+0vwwww;@JOMUFO|}Ck_lErpv#Ih zb-(d3yhWoxP5naDMFz3okv|+5b(`Y^YwB~OzcfzwoK%OLWVGytDN`6^v3$l#RMJ}n zanZ;VkMi=DoiO1Pp@2t=Jik-$4jt$IgfTy?z+-@y)e^3}WNs!F>|g~R3;eMv>AZS9 z8*c+)#jhF%+~+>wdKc`lfGVt%%9~9;Ua=tx5jF(L56U^0P8V6i10$5@BTzg9O&*Zo z)^E#(Dk}(C;0eI>YzQxjzuXm*Y*?{qmk8X=p70f4hhwEySef*g>m$q=RHEI3FJ%nR zy1a+6z8p_>V^Ax#QlPZm9>wof>Zzi4PtS9e4_Ge}BR=CT~ZVBdn;NRN&T8 zghx)z!yHanNm~9f{`hH`1wmCyfBa;r$~``@1U@G$=QXzOz!6Wza-Tf+7}7~Y*urQE zYcTGQRAmJb9C$kLtOUYmDi|S6VZ~$fPNbhixYzFIx0Mxym89hkuKC7Vx! zA3T6Vm~a4|1>B~9aE+V0PvC6|EAVXKwS|ONwONT&gcW!W@Hbxwe}B|BTUkL^f#(8u zFC#p2{rI1;nFuTJJm7v6gh#m)<|``*EAWrNQziWRK{e#QMSecOK3tC zcp>m_*9dQS{|r_PgcWa&&%pJx39tKI5!)TYO3~!j7PqqtZ%1?5-`Rv;stDdsZwv##Al#@z;|dOd!b;L|dpWY;ts$uOpnkrZFPfs?ll*h|;s6dTi_s24#b+!Hpz2>I zYWE}iTyR_r4&wNyia9QaG9<$pt*mjl@C0V25$zSLMm=1DLFa~l;fo~`##WwUtdX52Wi#k&nno{FfhtPsc9%-3 z)M_ai#wsfaD{u|q{-%Uy`@Th+5LVz< zg^q*|*jf1k>$k81*94wzPW;2guIOxq6*G!!!0Q|d@9H(d4Bu|SN~y~~bn-l1Wd@B` zd1u9-?~yh3tjyjsTUub1a7z`< z7<}ahD@%FpmaSrsT^Cf%S47o%Y4 z5hP#8Fvs%369m$ScU3HTJ2`)ax6mM}e74MJu7xp*braNk2}G?_8T1EkyMY661K>{* z3IBcB#NNsZ!V3Hr@X{p0<1ReCg&VzK1%4a2ej4G+JDRprRuER;hQJNq5x#PGId+wV z75E+CnI8y$SUn>OmmFiGfO3nS_;!BsZx` z7o(2TuNUOeINZwlj0+FNofkLP{TS^iTGjo6D!vCr;~G*t7`h8%U!hA>d1Q7xUULP5 z&U8Lmi9GMayQGf1Cy!q>3xfw}0Dl0yzMk;ot#i|GbQxChrLr*$l~+HB9&MI$>=c|0 zg_&ntKdD^Wb&_vb8$Ww|7%QjureFE`LziEdN?nhs;nzwZzgD(GfRa!%lD`;--+#)o%hY(EBBf*(dV;^H*6tc|Q zZdkVXtjQGApqoTp8|!ltV?Q_$RlXwBu56q(>e390;iI5!F_lQ=c=4WB8saoXgAI(LS*PaJtW+{lZ^vNbfAw@1~!)(ko{<-D|UEkAin zlU>9N-UWiSi6q!E3Zo4LAq(6Uc*#4$e>-yKBM!2`iUghjw<;pMzGs`;xb_=X7VSjb z$rc33(WZo0-)F34)t%0Zj_oNFzkMaeE^YQp!lI?CnD`rgBo6+}jiy5fBA<_xlb z)Mhh-Mp*S(jbGaxf~9H&qSsEDlo*1M6=aDjr#)A_W-0SN=e4D|xbMXS?#VaE{po~G zc+iCiarGMiduZ>Cqtfb<+$!^(rk-Vrucq#jegOG52|d`?jIkDXNeg1ojK3ZE%B{kd zm*TJSJdvD+9wlelx1qJNf=H2hJD2w1YboPRzDi>`ITOXFcRJw-_JW}2eGF}$&Xzu414nt{lbF~4<(6RdtLpD&BTn$L46T1AkeX6U4c7@R|w zQD^lE(;-OyA)d}?*}#hQ;rIgn`S|>1|NDYe{;|&o|JD;vMlizWL`nsB*ohCiMQ|3j zsP?N9i;>$mOc%_kpX7w80ZyLzEX7N9mg$NC5Rh|Ih5uiqaT4znv`##zDL4^aOhP!n0!~pLtsHy=(^%* z_~b_3Ru{9RXi>}{;`SZYp)D=|g9q>!;3Y2zH@4q^_mi*!j|E=!ittzWtFT}ttia=d zXT%e}w@p7x!;8Rum@z_>(Nc)7~A&I9yn%IK@MMG$Q}Dn;apL z2&#EDQD0W&b;nLK9DpYQca(60Uy8P27zQiwWZ)VfiQhW-(JHLv!U{YExM#7H$_p`J z6IS4{?-OQ&_3m^WQdB`*o+zdU&I~2RBmtvuLx*9(Nz$2s}L4uepC{SO$Z>tC>hET=tWH zRFa>sXF7ssKv4HK2}ZwvjuTNrmV&3}H8xk>lA%f{Kqj~jhQyuN>k0}WJn)-*0R9mx ztVn86WU&<%FJYw&ScHNB2jhj=%sG)VS1Bi4x%Va&)FiCHD}b9yc-ps( z_+Cm_QS+6+y}uLxujPj5;f0k_FWdFwk(p)E^A2jb3e@Y`MWVUCTrvt00K5Tsx)_x8%uj}% z_Ut4LUgf7uY3{_9OzUFrMUf2Z)z(RR!OD))4m4lISVQKt;!kYsZEe2N+0XQUU+KtN z(W$>~L{rd0*}bZ%?6wgzPtfbuyp1GpMn=Ktn@QF+BRMT zZB#nz9Sir-yth4r1|6O)&hqI&F-cN%@m*Pm4`HB-2BQx=;3h??PhI~JA27ix4Nk5% zj*RwwpEDhAsGH!{7!h~B-t} z^y#v{#JZ#r1Rp&i!E5E-t??hCkR@-qq&JneiZSe6Q1hM=wRgO!GNy-c0Dcd+gFE3S zg}G`Ne8CF*KJZcrcj?h)Kkl@L6=iq;+&hT)`&BPvN-wM|;c=sLlNq$&?}Vug+N8Z^ zIRY7r#DYoCE+X|Eel5tNY$m{6LI}59{1J^NlGa@1sxGuWAikF|MGVJyiZN;ARcs=ONT?4p;FalwcQvrW zs6bems&Vfu0|q5;HuPZ7^tgQ)ICgCg!Oxi_Xx60!gA^f4k50b4%(&dW+5ZdTl&}`n zW&!umd~#R#slOif{2)S+bUrqQA<#b3yEs8ZXN~|!ht1qHdQMSrMCk0w#}!VP(<<##Y=PrR_AF71GS zzd^Xk+%ISGS5dICG?F%)m9Fn-GRrqQJ?S-M?cuJkNAAm~R$wznh+tXE0eGqb;g5Z% zUq(L)E6K|3t@!tWBN${m%VP!$?p>lHwKw_4sp)r28oM1+gFv#)m4bq%TX5Clx;738zUaNFR^KwUw5_c)azz;v+Y#Aa^({+E?_&&Xv zKk6JyvB%O8f1%nu;O_m5-0x4@wiWIW5udtv!k`gM2D6;-Ff8Z5%o6>%-1G>O^}L@q zok6$87lbqDm)|@NG3c0on$(-fg+4P$O-$LnkV&wV$KC z56&Wd?zWey_<90X%z0k|zga@KSKBY6@!dbHEaXocd&V#*_vJ-#=}0KNb0zOH-`jM- z5l3hMe+68-lvMRy{4li?GZ||x@{^;-{;az{5ytTBhV2CO-nD@hoThka6JFP)F zG9j1r)KC5RZp~Yx%?iwM*6`Q*C`=T>rWjIK-=|CUv8IFIXhv^=o82c|y~brMu6Tu& zNmR8<6uo#fsDWlgb$HNosIr1^VAP0nEyP{pF`!1;5VeC+uQk}Ng#)9;YHyMz&2klK zl#cI;Tw~$=+>X4p2UwV)uZITkIN(vvgunk#fki)I1s)Gv?+M{vlk?H}2`gGq0`Pi2 z!vC_+$Jkj|Sr(O3(uXl9d8h6e2L0LNk1Yt42*DVC5?ot)^dbi1kVVZT0j~%od~b>I z7M$RKl}YriGT#Y_WKbQS6V=mW=bu>8h65y0fLn$Tt}=0MB$lvXB?);8_3!kXagay_ zRW+2Tu7&34Fogr~G~fkMgm>4g!hV6-MP3H`KYmXpjO2Z zH95B%))R#TqxRdZHIYH_hc5GJ<@gaX2FU3>1l#oUvd(G9c?MIR1Hosuh@`FTc@^4t4Jrekoa!$!i(fwv3ieV8&IsaeqOdNkf zEZ`r2msJve<-;*WyaZrHO=SW9SWWn#sXg(c7gko*OL?d&D?-94- z-#=rKMR+jTLB8qY=yn09NfLE*@Ev3z9F*{BS|JR@R;01{{p|_Zy?~iCOm}6_?F9T)u{hf%Yt7na&QCIw3@_hAEV(<0ukxy9P=R~DH4O6K8_t(# zTHn8O12yv*rMl%vrBVzkL02ux#=LLVCyK|q2-Fu6^^wOBdn}*80eCU+bSIJsr`>yD z1zrN&*Msn9apNXqKV90Y{{q~>hj5oQS-)eX3@iAhz%_jd*9tDi@K9KRmjU+*CA{aB zR(9ytVFg|eyiCIDo=wKPOIU$d0M`pA{#ox&)6j-s1zrg}B7*SFy^5CNodzqapbEI% zTf#@C2D;#$G+3z$Ra933mK%Q9VT^?^3Ogmt*ZuOZ9TUzib419ZtREx)*$Ss zathn#QOm=ajUqTv<<|D+q*daQt#6<{tRQMl%8(@d3pyNte+O<*O?Xmm7yJgoiifZk z__yzbHz?uYPpSfRimqWq>cs=k;wKCCdtO{<010=!< zya9NHI^oXKR8d>P3S7k!JEoe1yQMzHqQ9`>$592IsYAF**qKxKCJa`dii;oEM! z=!mBiR#fM8;1Qn0AGXXJZ)#y>AvZbD^=Mk4mU|QRPXBKGF$jeNq;CNC^dVd``61pv z!U}0^;J*HZU)+9YJI<@X%Bmru{jsIF45kM&9sRz6?l!8xp=!XM+!pib2@ZK*@M(Klk zEsUtQ#{O1~Nf8_%aTB;<9N~@zx+to!G70CI1H?zQ2B6-JCu*O|f8u16a9|0qQ6AX= zHwoSX^+_sG=MCwlfr%g-s8*WnPdroo-*LTsxoc}vT)G?C-iE(lI{9DytX-h2AXI=G z0{8zw_{Lr>C*qHOVFi8%cu5Z7zmGWCTUkL^k+Ko+ub&7H?(d6PiLkQL=^xc@jrEDU zpxTrZ_0zhK7&{6FR=O!OuS(|ur^4Fx5AEr;5e@NAR|iyf=NSK>|Vp&Cwe8dsk9*dZCq%l^|G| zL{G1KdkK=Cj%x>Nr9B}zc6`LbQ3zxMLER@LSUka13*VAJ7WiY}E>8*nFvj{l-h8kk z0bAgK-h?l`{?AMNEU;2Ec?@;X^H>|pL7s`>>!vR30fbzhJlEXMg7?W zcl4t`u1C_*NQISDGaJ8wynS+RF)OL|9_M28A`bBOd`{jMR@eTG=_524RXJkDA_kSc z{7rh7%T@O^?5(s%CPQ^0o5eg}Ty6752BodTQ|Mk7IQ(R);1giT>qCTx? ziAO;=;H~8h{MjqQhqozRjx|77shKvJ5^f#Z?f}bk>ih&=nsq-fkm^Ei%p9w{hNzjH({kf@_{|C6?(sc`UKR(XrlH#B+l~+2cpW+ zGG3+XAlg$0 zjx=kRk6%2f-@>Pxwuv{T-a$_2#?$sES&n;BCtpCdyCaqKca+NRQTodG=m7~4Rc>3Y zy43Pf%v_s$ODN$cUxzGetIo$)7NM3GP-h+p;`g3{!IFz`0PY3+<_E%4dJmk7`v+jf^x_%tz|Vy5Inkm4N7P{@X}OWw)L-ApprS}~ zslStZfe*c|^8Mq#wr;FtX@=}is>4I&jj#{PDeT0>i|66<3Iu1=i+yUOWez#UppUbq z{z!%voh*!H$@Q6_FD}#ZK@6QriVIxMLOJ-p##H6~fA52e z##R&6`QO1f*ee_$;Sc=wcfvofsxHTL0#+vRpxdhhkO%;^zMiN{tUlnm6b`@xfx9#i z{@c0dMmWI-EASxTr4nxF_O(5}(0~>AbKoCUD#Ykv&dG(?1{7AL5)3?4m2kiQU$9Uq ztSpt^*B1R-lCyKhjI!w{?iWtGB~OR1~aC z`rBfCe+I2Gd@cPV^7FIOaf}sX^&S);rUIdeaZi_GR9k0`z%|NJ; z*1xAPf)*l-+fPkJ>Y?R)3T^CqFxHr^*LyMO#n3&o81(mumf;LqHG6dh3KEV??psqP zC1Vn>@F?MZ5-x9jxt4c&?aaXTvvlS`61=Y`=sLMN-{fsk@ zaNwnk`QN`|$t`!=jWg1ay2+a*vswQ%=4sbLWfz0yCPx2^72RmW)qYNKHTK=dL{CJg z;xw5fUDm3e#M1UJ>!eDwCJVn&hm-lXPUt)n@xgEmqBy;zC_VaV^}&%m#3Dtxr%b)_ zkJQb{!>fBidv;(&CKldyugLp@#zPZ~;-Nvo4Iea~bIvuoCPsO2;6}VAZh8Gx^h3f! zeC!kt!>4E|g)*0qxStDVRwpx$rAjYgxq|gNE#Z%r#psr^nPaW#Nks)5%T{5On9^bwcPC&K$-26?BamzO9j z2n`n7*>&+_23e0;_Yb_2;H{ZW-hY9^(J%lwLJ+SU>J%dHO6uIaGgRVYlS-_wz7tJ&o)Z*2X zHVn$Q?j%h{4dQHuX94oZWw6OXQP=xHexY?%0trV=xUwbUb?L zz^~R49(;DnE@cH_rC+zot#J;o;rFL_$lrk*(?HyN-K=pIPIyqb&nJKUEGg~P%~%GT zeHvo%GI$T~8udysfG8T&;dh+Qg$7aOl211BG$u$c=9r!P=P*H)E{197d@~@JdxHd5 zD}_H&CRw6}HvZZ7QzgYGD19cV2HHdoz&$w13c^8bkbHo_&YTRhhneCHCCsF8>%SjG z@-BSeoFz3Q;HQBE$^X$dU~SYwg5;*qXSB~Xf)daC(9&*GC#~(sWlmE~zQG)`2YPg3 zP_$mfHU=3sOiN@?*1-?S_@S~;s^^wesu_c~VahGa#;60@jt%2b%H9X4*KBy(Sd;gh z(+zlI2n|MkdhYpt)N2l?_7e5sh?Cfu6At*TbAgB1lSIYB=M^}c1S?6%<#uzs#h0p$ zy9~O{0zI5}MSSLy2f;W;5-bU}!`UGri;{i>Zs1CIwu=sypoEnqGgx94DPqc00K6`k@PR3pFewmLl8|p-c%3$t zznt7Ng7||pp!Lp7a#R`nqk%SGJ?aTdXIsak;uThiu+Fb3tbU(B^k^bDqYe&NpUj}R zH(G~Kn9uMweM8=swg2KQztBKSDFU7!Pq^)~(U`vqD@n-Jy`xHjKY;xfS)XQsG;)4B ziP|ZKU_dGf-uYPeE6!F!mZ);mGy3N_AC12~zDark%6~vOr(|L^i*f7UO&=I^YIe;` zY~++6?4$P-_Th}xScetCsUJcyb}2H8-%xS5qM5nL0ExT0e3ebeC5M+)0Gv3 z6_r{IJm)^)BZePbg-c#wWocYE-+Kpxloo}Fj~u?j`-=&AZ+UHGii6kCfNBl!d<()| zZQkF<`AS%sL~6h){+z3fw4M*uZ}85xA@5sG2X0_B4;tunzXQMFNO)VPix04A0xMHB z$a4^P7iWPQIC2GqZIvo%V4v!@Bpp> z+*!g`o7Vq_?HE{rUj?2k;RE};3&9&7R-~s1JpLu=+`sbIX!K&RvJxKfPEUr!HBjrr zh?=ju>M@RJ!a-?`;&tFp-V$E@EGQdyu)#`cH<>E6i%D2VvU0D})v#EXKa`J4OT_^f zEl3(ilVpdQ8F#SS0AX^MdqKBeo)eMP4N$`*YQySwSXB}Zz_o!_#E`_fQ9CgM6IS3l zzY)Kk(XfOAByIwK@R1~zwvR$95>{5nTi$Fig@gg9;h!aHt?~>knZp72ErAyi zp8whab-WZ-;J1MX6%)R)d>B z26(UnHwLbzOL)lJH%@pFzzW<1c#t099p{Yq$4VNkcmf{+|8|pbvrUht;ouOgQd16V z+&(k%Z!Z=GO~Ea_Ph87Szr4peVR)cFGy|@0Nw|k$J>Go6O2w4NQ1;uERSCK^@yEL` zt#g@1)%}l0{Art!s9X?EX0{YSW&5#z%!i*pXeHqfVDzcS^d9T zsV6oItU&d8LewLb8~(xiD;yy42zatP;nu&LZH{y3u#$v)f79T$Mv;)P236IAs7fj+ zRoJHyYqVs#5O}H@|y7(pRfZquveDAjgJdeUk1(SP`w#7qN zGw5-`-e^>dJ-nkN@4yqUEwHu*4OX+mc8(K!=?t2e+8PN>%pd zMq{&VQ{_65rT2Hua=zNxU7?%!WX2VWbxEW+b*95u9Fc}DtA~@dUTVaa|fbfO`Osm+-l+UU#uZ04v&+C-8Tlh(B`5@m8ojSXt%8Hnfwz#FU#_^lELf z{Nx31-vaVhabB?#=g*+Qyeo6f_&)EMrQOQ$!##tyMKO8%p59V}6Hd@zRp2n)cNfz4 z2K8GRQ5`4OYvRZ>93bHX+^vT27Mk4_;gAWeBq5KjOS?FKg@iAt85&>3YawXWX{=EQ z2jG6d4X+b!ojQ35cCTOs?ho8Y!VjcwsYm|+EARl|t~ZFk;7+#*$_m1YR04r}=n-xh z7LUypVP&ORq;k9p)F4ocCF<-Y;&Mpgz^J-wmy3U5c@FB`TckQ}*TN5Y8^D36@{h4h zHCT(9L#Dily=aox0iwwr^#)(_M+hDaMLR=Me7?*05Vpd|CD}kMqUbv`U2GI zJ4Cg5lZ@Rg;Q)yc;4b$F&zR_g0h_RrguF2smDyqup17BwdYcpV)7$pdxTXdUlK9^JgjS$zIG{tn#V11g`>AuYK!xm+|iB&j=9Qj-Z(-tPrs*bo89dLNPu z_$z;xvVsssaozyW@+Um1`C61*SXrp%p_PL;6z|Pn1P^X_NNaa;4_3Q%`$E)iBx2kP zpco}Kv!n2x9wL!o#r_}f{yjH(#VVaui~`j)jHr5To$&4#4pgKjZ$|xw_On<%J?&z2 zh!%glv3YD9dS^Y+O|7J^2=3hSo9~{(bu+pdIif<9wD~Tc(-B?$Id*2bCM=t#- zNc#75mG_PP{-r$!53w-ghsLjAQ0@ZveGDoI-+qxnyVab{7-W_+zlcE{6?!Q$s4z{p zfB3(+X5TM8A`re=aIR!LD{bjvZojdKYfG9?AQrLZ#9)uZpV zW6;4~w;J%s#=={*ki2iJthU3AQ_!FaY%%~^mfiC?b2q(oRSj)E4(|D-Ei^G`X{Fq8U>-pRzj=!W@Ec(`(9OY-L zq2_O?7nN&ri1A+OIgn4`xNrEq0X36~QoWT*H8{x>OG~0`sF^h2!A4Zt`+HYlY%Z)U z!`hqM#qra0P@^U4&gQ!@brcT3-vRf%OA=mZb=PB+2v)KG0KC?W@XS|d2H>kBSV>y0 z^oF&2`DCv8Yb!qF(ztan8_z%n1l6oa(9Qj?KDbC9vLu)@=|=@e9|^VO{mL2jI1j9@ zWy0OwmfVLYRRrMZ_y3Xg)d4{)-}eS8;9f1LeRg-ZPeEE56hT5zK)Mk@ z1*E$~N|2InK{|eC?tWnT&G+AP&pr3f?Ck8+?m~pz#Re-cH)SG0udcT$*6*tkR+UB8 z1CLF06hz0btv_`1I4cY>#r?(N$9a~h;!MPCv7xvX;ct;Pi%vnr3m5d~3olT!Ks9n8 zYMs}K44iX<15w2hL#OzS=BV9lP`zA;>KC4&io^DB;8bH*S@6yDZ__WrBuA{WUK7-( zp?~@bK__n#yc^MfCN`TOOM+s-_aqJ%`X})Uj+}aL5uS88@YeDr?-8#nuxZIO$XleI zP}@3}%P`>aJpPrIacRqyIo7$}y@#WrnyjX^lmfNBA7^8~`19`D5*idnhDN?-YWCrB)0 zW}-Ix4nQHi<8#P+-N(ox97ur%=Y3ss=NSYl0@Wj*sNT=3*W$D%960Kt4by@+=)oC_ ze9S|N;jL9e-ZD`VC_K}k#u;JTrL_%vm>pwp9+!X{+eBPluS{Kx?csq8N`W^DxYXqZ z8}W32mBNY5E~j*)ux%!EQ5D>3#k@r+C0PD92(>;*2>DlZNeSX?$J_O ze0?8Rrp_yy`cdvynQb?g(m?xS!aixYVUKh*t)v_}N|qzEuS`Ab@12^KP2fD1k4 zOq?YbX8-+r{A0Fm1WsSDcdNwWrJhX}Hbz7!#PM)5CttIvgK$hqWW_Dq#GhQMxW0G` zD!KysR?1Pn&c}i=UuRi!VK2?UIgNv6Pn*DAUHt{`bVc%3?(dGJSEd2H68H;M!iS#< zF2oN*UfGT6J3$f7q{o3mVnnx;!WD zial;_xUb;>yau?dKH-m43N`RVg%u^N1+HgE_%PGI$4W~ut59XzT3h2R?HvtV39B6X zt;Srw4&G@d3z6U&(6^7;`q zIlnv+Z*Rf@xGeBO0k0o#^#Z3#VTJTl;2I&s|9Ac57!0Oh<+8KAb&U1Ha-hb?67_?N z?K`{+1P4gS1FsP9U0=-oun_?(Cz1XB>}+<9PXXNQucTqU#|jHA%!A`js|b0(L0SF6 zdDf7Mal*E?+Pc5@QubWb*kNWfFF$52jiyA1-Xz z@y_4q8t2=$ec57?qA^?PSAx598o4J_Cgac*6Ok&!2ftv*6%73*u4}-lHke7IT>Q}O zv#&cg@b|OjhU{XBFFwtKqULWQTDwilvTJsmxHJdXU!221cl3*oa?slCJ-Tqvs=ZAE zIOs@{sUZjb^Ke`Y2aVWo!Oj|}pse!gR0+91dtbo7A0_6fYqx3f-S2K2%@|bSGkB+D zlD9&y$6EMi8Z^+JRDs836Q2Kyxwua{#UZ+@zZD3cW*U)yxW96S#Xb;az9GpNf$ltiZK^ z$ICXbCz`>nKeyw(8(4vB1Fx1Ryj(x~2L|7;0@nflT$ym6!krjAFf00aUEobG2yfJU za0M&Iu+qggRqxtb%UU=-HlH91{1x!TD8hS$Y?H=2=dc1d1g;TF_{aOxFji(( z;6{ueNBEv)Ynriu2`g}8;I0XT7gUbH$~?28J(w_^AB4N?es>KEU$9a^#1#9j7{Ok) zc@1h(I#Da;mf*TG2d>QP{7Qv+fa#LfE0Q^WoxazHVWPjt0HPtRPq=%aSohme1gecO@G!FDF&Iohr5ar~{mDR&xw zTIye=noi^>KAPs$)d^D<5n4Xw-aR&KdxP|hODVmK!#(hrWJz*yW#_&f#6h-;I|^F} z;!x|xqjX^&FG71VmELlWs|MbW=dx>Ba7x&z5!>6Xe(S0^$E#JEPUwi*1%(%%3o>(&SJ<@px!Ne94 z>>0H5Hr~;NEK$WLM(#8@{>I&R^9fL-^lu{j8Ly+oRNSAd5dG3DMzA=2omp> zu04*keJpEu*D8?r7PX@us9=jjp=&xm{{bsH z04Ly8287#Y+(L)JtXy?QG`}=}gfpnBuZY^@mlBSV5*&cL0Dmjs`(CX00~147QGu?& z)s2b2a@yp0bhfaPwD`NHQ|I5U=AsRiJAN36xxrh-guFeKr#-=r5i~fek#Prhn#CPd zD}lPoY%iXw%mMg&;5h>uH$e9ZSn)Cm2Zjq zS2xScco`oK9JOIGekT6^PqdE2%@f*%coUy$*rbM>JRxXcL4wnYk{?P-Fj?SUz)hS9 zZ%`hJH9BTRC;1V$^9RC^zo4uXaM(N_*cT6 zRvwhcrz~Iv?hE`&4&fJ#%r9Y*2rCl)0$e$l@baDBxIvkf3%PrREc+&wAE@2}H7qO} zBYNh*QRhpKWXD_lLH%Arsuo?=8DOLd2S@|}|5!$N^7kL;wV0KYkkrmO3W-2aQv~Y4 z>)SC*Vh&hz4g&5`O%lt;8&=`q7OW&8J`x7lWSh|iYPSP1$Ue@B$4(lovO`wEkgTgE z$%oTDHelxs!dzC-s{Wrq4FT1no~X{b9kAHJ95`zKCHGgL0HL7T$u+Ugt1!b5&5St! z4+CDKM))$z&k0ywfR#O8!(lMe6buKJbjE5b%#?Dw>Dutr?^C#VGm{Nwdx4jLFUzcbQ~Kz2WMD7)!H&dx-3$WcnQqhuru&y2|6 zdsKHC&JV#%8sY`f*|sx+AhDB<`ehSGg=_cj;`Yfpz4!v>mU?*;R%qC^f3y3ihHz84 zwY?&+CsW29SwPTi&U^OQ`1)_6iQ56wcdZr1*&;M};gowE z%lD4QG7@XooEHy2$L^JHC`M*D6+^|;39I_7Fu)UltH%?*HcJf?Q)Xpz@{5iClm2n)_`AC7%$6a*iZ_zpa-jPRAyA1uHJcVVRl(C+lYiGPdN@h$Az>;vp< zV=DZstH}TSy!rhx{D2Cc$7#SLI_Z6qHrhO_q!AI>)g@g9r zy?cOzvbX689imthllAlh@Ep!WZD*=eZJ#q)Jsw|)K%JAfc#B=|jhX~%7O3GGMBP2G zqaIH2z<~=iO`@tVT1z&lG5SP3?$oI(em4ULsr!;Yfm<6BE@Sl-8{N!0d4Occeo~S$ zIhUwMSUpt2*0PUq{Gi?W4u=JLtGHn1!Hr8fNNaDFD?wUqrz^Z_7O5lq9E7$trO=0^ z?&8cROMvr!8a*r&9}&m}HNu>z`hRvDfmIZpwV%2?DOTI=4F}L$C@rdrI5#f0vULY}>d1 z+@AtBP<@&=zM=#Vl(i6e_&d_x94q@3|IUDw%k0_>^>j!Sf%?vhsFfQhW#FJ39Do-C z|LR0|uRZSNLbj{>h_-?o^C>{qQDV za@3mH`cyTwHxqhTkriD#b_N&G|HUPKwSL6SnkO7f(>{%#P%ZlV{ZC?vEAS`7PkK<@ zwHub`B*X}#39%)tQ=fK5$hGaMmL<|kAXM^yt^u;-chm+ieXix==f|OR&$sxwTpHWlw}Vk zg_l1}o26P??9eUV!ic+FuYY>hR^iyLscajsEJB`t3I^Mp)1nX|G2L3_vP~Zk#cf-U zbn>eyogdorLots>Qe0hZx;Kd(cWnSQQ?Z4OhvJq_#@Y*Wz;00^a3xj34^N7&mnJJo zh-aA12fph`8EA=b3K)+t(3T46B-sT2Kuz+m+x!WOO-zMLA*fqr69>)nygG-2n(Z!? zb5Pul^*nUoaGx&3690EK$@H_Z5-avU-DRpi5=+1BGY*lPPkC|jZ~fnFAxLy|FK#(a zkT?hZ>-cjy&heL8X*dUsALg}}gYF*n68c+Hqqc|J&;#*E2_ph0@v~{^YHzbKM`%V( z)@oBthELwDfYmP4CrOIw_4>Len~UOW)}MVQrUl+{`sD5T-2-zxra@G3V0vKjpZm}h zWGt|>`HHB{k4jEr84eDRkOf{~NqF}76QNj(fR&T@EI;@HB%XpA>qgX?+?!5#nHCPL z`;ddd-GdB$|GcGwx0_%l4e^#Mzadx1K|joz@(9Xb)!M}4uUz9h8PAJ3`ot3ZodO#- zeoNk{`gJj?Qy!UQ3z;;OxXIyt7v#fvzncDX0S6Urc~pkmLIK`|zEqB{nsYj1IS(2{ z72BOrKMc{>wN%z`JMLn-JM1bBd?~{Hiyyhi#v0GZt1A#8cd;6-jae`3Wr$FI{0Y8* z2QR-{%sG}kzH3Nv+dYdGUi)+!*F_0&Uj|Uz0Y{f$#KWSaCsYQW8bSCWH{X2BKVjuc zZfL)~h9L1XoV`by?crFj5>Dmd9J&ewl@du%ZQorysF*AzRol|m*f)fY*iP=2Z3i&A zZ;%vL_QgxM*zXnlYQZxoX6KTk-I%_&q$QXxs!|nrWIo~E-8N#elv(*(==51l zB&G%2r;_mD{qMfTvMH=2EjFZ=mUko|p$)296;V&yuSH_a0SW5>_pBq_uKWO2UYV84 zZkO*behu;B+1z_r-qMA)>{A(SJW32^S7KVlG&t{P1Htz_W+iE{SQ=mNe}IGusL#EK>XiMa4lka<0r+d+2EGD5VIqpltT?i13fwE2aCxH!hSJVyMRmvGdp90}FBt5#THTnT&1^y0rToU2O@bz>23ItZ*R=_<| z2%oVk9nWB9MH{mQUXexkux)?c#E0NvUsy~i0+d%MX841do zYT$lnvYep2$>leo+Jb6RL)7Bvz<8YVf&*7QCstUoH`DAu4Hc;K&Zf`AQ4ToZy4eFy zZX$_)ZvC4oEy1ju#A)}z$2n+_SCS-D9pLTVLf)H`^RP|IG=Mt-kC&HaeO6h<>jPK{ zfE5Wl0k2aby!wFl54@KGD7DR2Da1Zk~=D<<+dp55^G!Ia#1*+rD`&jE@4!}PEFL_52Ps_jU#cTpr zEE#zMmvJO~$Q&8mt;{M6e9YUP^_^bY@ek68R@vXU4378~2vc&g3wab2$EGq~2=d00 zf@JRR^ApcdgyOslSN&oSz>lChco8*v$blGq77Pv?b!y;|t!PZ2Kn)8b>ehxnHPRBy zfupYWwC5XBpH0sTP$8e;9W8iY*Lbdu!#>ae?hRZwlvG`|tV_TT1Yt#DKEOXE5MHU` zvjk@VVCAA6+%mW;8z}pNtB_6HX@6w(!5S1ih$~jjtp$h7I7oYbmn;qnesrgVgXVoM zYvCZ@IeAhX*5A*$un*1>qannW@|Vn?}HUG6Lg1to1@ zpPTf9;LCgxbbfW)5@((u3)~-gW+CBw^rF%6F)Q!@;GxxoAN=zt4zMvRE?yvTmuA9~ zN*<#6nUyQUGQU|}xhy*9d@6%#5WIclp0Yb$X7&8dI4}VX;K9H>a z0z6ES@LmttyW7kPJQTR13gP4QCaYmh5LVz}z@H1a;r<ux6zpucpUI*0dFx*{2TjIumb-IJl~4=6H5C1#wli4F{Y0Pu4_+txzAA? z4`)`sN4Z|}SXj>z)7$PcY&c~s?zv@L{zF*O7hC3G^Sq~A6^!Yk%EpD?5Ld>T;z}1B z!c%}n$1RWm{FNKwCqGz!$MPDiTp$TMTV;Z*+P*k;`-`uzIxNQiFs_(=StAjGjqgeD zZXaj#J4}|#$)o4p<%pdG>Wj}r?OR-Y2FKjtKvc2ZZkG-eao%;CN^3dDdvGTc46c$P zC?83JDwFjtVd4u}qKXae+W6$|1XW*dy~Vdie-##<#jtCYUHBA&rT{63VUR>I zs#f_w!CJQ#6QF2u28kv%idt(I79Drv6FUcXizQ5l=%nV@#o(0@3kMLnv&DP>*JFLL7fkzh*Uh3Qh!w6;t z{u8))G2yQ!4jPTseOS@K<^Z=WC%k+4KSk0K%*v%WTXLds%ZV4ZZpw3WsOG}ksgk^# z_iA*&OOw!mY94Uw7Q#bhM_@&eSvl2T{Y-@iV`|&kjA?hY9nm%9GjBOL)@@I$4BIU& z!8ADUnYS~o2oh%t20OY}QU}uRKzVS!8~+~mo8{j8`u}vT4%ej4NERS&;4_N*Yi8sx zd?g0a|F?T*YA38JV6k~B1a1>cdkN%}BNsR7X9cei`jwfH688AW;T9>?PrPtGnVk zz^t4^<1>Dgv(7BhcOhh0{wgSC+9u#C%YbVzDni|AS@TIs%Z;VdDU<1*)(ijDQ;wNeq^LEOiG_~+{{X*We#vcp7-VHQ>*8z73 zAYAtH=%wh*U5X$j`QC0ueYkw3lQI`d8;Czv|z&I#ny1VO(@5>!0Z1M?Ur3%nV4&{x9!-@L@2 zpINaG*#g|^8{s(~8}H)BBCvAOVLjp}(={;FYFns{ko-N3%Ts=`bs!?iSmG~O38ZM4 z-vJX-ri(jN7Pvwh;X52FdtmSbE6KL|*GR<5ZcZfoVOi@PT6MA)J9PFG?p8m@{h;cZ zzp$VL5mdGu@W@QUwQnAi!YCJ3t^l9MugOMb%Y*tem#EEwRtEU=H5|A?JhtheL6F!t zdQXow=LG*Adw0FmPDup_Di@RBRW0L0bk&gkU#F*4ew<2xPOmU3Ae{@dy8pvRoTmMT z&g=lQA~e%VNOR7xsB(-Qp$uFJc(Z`t9VOKX-`9W@5a$i_57Ka4?_*`wlE%*#U zs#++Y=@YB*0AiuIeB?*xZX+nZZF^~;`O6ZNMit)A%JdTi*)yYK}Unk*|sBpt$xWR@>o#2B87G*_`mW)J)8QAt@vyCjPZg>{8!_CSDTc~IMa;cfB;Y#0 zeOw4H-{XYm46~v{y1?~)2*04D)fKf2D_2F0V+O=>(6I$mn(#&S=kV4EBJa8<>s_$` z0}Z<8-NZe;;*983ocr9zj>3VpcAp9CH!MI{`w)xye9|!X%g+~xq8v?8w1#?2!_FUK zaf-J#NAT0_`qhC0IF`$kZEH|yJqU&if?E$pPL!5lvK%$%Rg4}7B@A-Ci>iDH@3<^V zC;3J;W~xks9goq6Av=c*onOBHfz#G7lZN;;TEh)p+z1l49Z#JYFDwm(tZeNQEl!*j z@(~>+$LR}wnF#rw|9pZ=F?EUpKkeCN5w;MOXn^F>@+dj?)pm_ImVy*HZ~M8Av^i*I z)C^&nO#GTk=$akdaen3%1XX^M;A$gBJT;jtU3*{mw%3+ST&~TOde%|W5agc%IkaXO zhBM5C$nA!2+3}8(2y6GU^P-){yHQGFe|>7q`jrHU-POVHB%z}d+fK>p5PofGL*-}o z^DiUhqF+OaH(96sD=on?BEjbtJer`xl;WuKzqaf*-}ffvC?`w8oB-8S6`sSmd*-ukwAqu5WWH`ux`r zOi?Dm&I5MgerK{&i81+qv?^YyXyQASe={0{epjrqMO8oeJ6~hp!+p5arU+uMNkKBQ zH*G}QK`08+?%jZfqJNyhH3PRo;J$ymHx@^9;K6h6T#%c9JLwI$3EHG9llSlnz6S^o z;BSF{*Cl-4#Z#eJgMt;fIq(tzk6TxTtvzN1ZUH?01@VuhKAM0-8nEI%w*+2fMEJWC zN3f*BtlWjUH_=*v#PM+bq9XQF;&<>?d_&#?nm1#kfN5~vj+rCvLA3(a+nlHqjvT>2 zfjMy3(5?HvSmb04s)Ykld++%Z;~D0_scwti8A_0tQ>e=W_J4C5Rw5Vj-YOZ5Kum-4 zzA?Yx76+A`?--1FvW2&K*=NYu?GCyY=scg^B0)x(-JC6JvplBOLiZfE?yJO)8x?Hlyh7^wFpa;wA z^N^<_yp6)iyZp6w3$|{cfi~v^+~h0a(l)i&jbc{Hv)zdt%MZ)8;SO{LS38BcU3TqI z#99_SD4bZ?r{Zrnav8+M=KFEbv>P#j827qBurZwko9^5|cfw>j!N^eqUQj;mMqS5G z6hxp*u5fqFAorSS8&;w7fCz9m;FXz#SBAe@jFTd;Vi4gDJo_i%c7x7-!@@YMTxOXr zVIds!pY_)T9F%9cGKGT%ZA6E*P4Ycr6jo4-L8}xne`S$4>Wm;+euB{N@U$Dm5^M77 z0?*s{yqO0Clj=#(pt;vPj7%X*6=Idp_N++hcm8j}+I=@`{u-MRT;K$oK8HAH=izL1 z4k~-O+63+G0|I-tP~ekAiKnqCj_^bk``beie!^m(*cF~tJI@w|JmGC4ugH4qL6?Sl zptV8+_k|a5(`SVD9d{dJb!Mg1^^4nz(^A<<*v}VhqlZ=pcMATzZS&bmu6hO{eT1Ti z8Yv#Vn}%r}(*^zsc!GeBebs`MU}i;!^BH*abK)z_xrz#9R;~*A-z#^*&EXAd>1xS5;{_5#X9E~;3XEs zf36zjh#wci%B5kuZaaU6pV3)=g=4KAw%3J&j$1_qb5QQJ*zdTiehBO5L}3>g79brK zoTF|n%;QHwplgA3{ znc^?+*GYaz#uW*Kx333zKN{qME5$U(J8O6AbGT!D3;RfW5U2_th#Ix+8it?D0SN>H zf9p-S@8B<3d16+sSUy8n{mDTsUHx6VF$dtWz@thCH(fjc(`04^9tS+Hg7C+CTCkOh9Ja8M7c1DCUU zvyVY0fUP2{#QKuahyU?JK=^P06AopMM8HHwl_zT2n)7(fF$YK_0ngGU{P{R94B?rT zB*fK}(<(dd(L*JJTB=9X?k68(?7|%Arf+vBZb7sq|K!+n(oq<0i+$m6ReJ>_l>)`* z#-!-$)}kl$v!W1bz|&j_U+|yjW@!m# zr9y~5ha7S3eF&&OKuvKY>K%XUF}P9TKvc0yl?nf>j!rHe)cp5ERrESlFD=0w`0`qr zu4NxR%>ehiCvnH$nYsW=W$@r+&o#|si%*%L27e@K^7naV_y!*wc7Ab z-5ATvuyPWk{Cf_7L@ucL;Y5|4krs!Ki@*UAdB9U63E!kPAsb7XunH3AT6?E~PGKI9 z$OqLiim3new>yE&N;p8G0C-e1;jvF+uyDn!Bq7d7Wh_r`LPu5zs?Il}j*(bbgJYI( z;1Ygtx3jS5Bv!*#gPJ5vX^P-2pH1E;hUFi_dyLQ^Z}GCP_9#C{m$%(t(LBEHkL7}R zxc1x6L4%b%+3i@2Amup}BrD+{>Xe1zf=nO3bP%W|pepAP)x4+eYy9{R4jlD~qhh{%mET*z~7b=em!CQFKl+f%1MlATr(9C<)Fq_5OrGr037sS4v?q- zu2)a^tBeWqIEDZ#SGJ)G`$j?H7pSt0f`qv<)~A^RBr1WcD=D)s=%&Jq8IXXL%VOfG z6j?0rSAnXpLezOvpLNE|G;k2^Cxy0kde8c0d0YlRhAPeCpz_-Pz4IYn=st;O%U0)u+PtJ zVi6F+L=~4{%se)Y`9D;e*U8V#0^CWk#{=Ur>FiAO>U*Z_$-MtbwU@h`1GN$}= zpJt>;aCc%Fl9fGj|09meBS}p_MVs0o4YEmFkWo{0|ek60? zs5(R52sesYb$4^7@WXLWt?h3)N5$xS@hIO@#BdC!7(-vw<65vtMEx|e^+~eRTQ-v* zv3A^Z9$e-G%RR^9;DMwZ1S6tJ(60Kc3BL3KS!z}7TF~X~{tv*F2iN}_aU-*%FyLe! z#I+34-<6Bp7vex-AwYAj`$p&{Yu@<-|%F92T^YSR&-N zZSa}52MEK$X-!?WK~VKG4*#i^%n@!?qOuLZ9o zNL)>pklS8_tEGw<$?_`f+4OkgX>(ixL?WtK7iE3+jYsFE2CAJVQDPg)4n!4q znujjAzm|)=bNJTrs2z29J8P5otz)xO@RvtuaDh4xJrTe`@_~xNI=GmQOts}GWUc|h zxaTCes62cH&d5NPyu}-S;uxcjs7OsvU%n#ht9!RG!D9|wAlJ>ygfk3c-6niE!#@r5 zCx!Cm>o%vrl&=>1~+GtBu zT7C#dG0#B_b|q>@Spy$5TsRO_>;fKst3Ani z%gw44zH94L*Y+?sksl+BLB$&Tv*&`<=Rf1?tBDqHa*A!mA|AfurJxV;~1zwv(FyZ$o%T29mebtK-k`=XGchRs3B<@?TLI z1c@!g>f+ULNZ$zF5nsuB@2v4y3S}DXQ=G;y_@|M<+C9=jT7sFm3}WZ#%;X?rC#zR< zHB9{5uKV#+gLgzrXgjd5smFAFHzo4-yfd6wWb?)E9OM^}bcchwcAEZ-gWg`2lcy}6 z`m|+{HE@Xv-`lH6`fkAzoC(S*lSO4siM>7$pEE^?Nm8sYrBz=1`skW1+qx124ap>bQCC+<*xUqU;zRN5mjs;H3Fnra z!a?zuKe5Fd3xo~RqOhT(y)&9F&vh+%^mNj4P2cH^W)(h@8ZM;)yl z_L_sHtO>r#L1A;P260ewj9w`2JX^$gYD+N;me^q3i$&t7CAa%`AV?e$U7S3#5M8(( zy#4IR`+HI0dhE|Y1C7=mxT_oCnmZ>{;`eE=l7x7*6uy=J!v$I{wV$tw>+enY7OGp7 zzJYUmJ1G1i3gdvV?>9ahnP)v7(UbEoOm_D|VI1M@@=2(QVfI+sWE!{? zoPY=W5k5UN3NsM{SUHJK4rT1a@XnyB2N3oAp~3fXJ_-)Fk}kj%BM1+jvl7eL%t{jC zHz*yWKTsw(k*FU(_ z2P?U-auTxThMJ(dvowDY_2F#iTR3?Q2QH_&vD4X3_IprG1?ru9FSp|(fNzQ%QIu`<8hvvI+~30x5Qo_Zx{Fdw04{#2DcfZoe>$F3jK zC2IVZ)(6C-=DETER{WI3)*LxLMctDj=eZbTr$?T_)&9ilPk~}I^^IAH;~R*?QM+b+ zW4Fd}9L2`p8V8$YV`&(LqSt%897}QcPDa@I~))wU;(E+L<@c!ve z-uiBKSZ8J$z(awTzbAaFjM`6pa0*u7VZd8H5FWPSFN~m>6?i!C`j3RC-8s<<@6f}F zii!YU96ZmTq!x-4e!mu%1PJX@C<=O z5~zN^i27n!ZYONz!vT0Q@RBORdsF(7=!Z4FFEm=$;?@Tac`@0_xDC+;0sfoB0X zFe3c&xzSf}_zhO{+1bF~S`gl8vBby96zAjf z*b_GoQRHGNO2L-USy*sDEH0s!`G&6Nm0Ny|I$lIn%-_O_&fCd+6 z>OX$M%7NIzD^oN1DUhZ7^;MkXj^cmW6QvL_Z1O3_6}eDr{4*Po&|ee*|58f0^zS=( zqA)9$`LP?b#zUeQ)cgvfPAVET8fV?$0K5dac@5!}eqMNRGb`{?;Hq_mcgnO(#@RAh z5wZ+;btB;`l8knvVZtiZOxw$zx~ksnNM|{y?^}rKwS58xTg(A?1#n#fcaktcjWH|m zU%-FMsIyLHdY8#o_>cswxIUG@OH~Mew&2N341{6jO8LA`{@+~Pxk@X?L$wOtmTKhv zNq;r&Wu}2)<8R=e>V*I2T!9XeS*ew``*Y~*6{b^=K{dFqG>Cg<)ig}dn1@j4d#xSY zPqQ0ugrwS5+gfhxsA6_l1Mg4I$$R$l9RXNEg9b%vx2ti+>V6Nd06(m+KZbiP+`l-H z`?;p^7@9H>p(lxLTNN6dv}h{l{$lsv*U^*I!QK8nxz8$HdKsVVga}7%sO#K?gN}@^ zzw`Hd6&8sF*O@fG;q8r!|KUjwYu1PcSZ{GF6N6&m-8O=d#y0}75jmo5tD9G+z^G)txc)3h4L^Si?TIkul33zN{fsJ zyGQEtmZ9=lEQ%r)u{7pODHnM55ZU7#)THQq7gypb1e=veaHVE=3#Mt1C2GLQ)_m5R zc4u$;$$=W6Lewp%dw;=r7Y;-fE5k`;v2ePzUVQ0e|Kkf67#(WDe0==qWaM>-z+DlNfe zQ5TB9!(S18YeCitGzwTbiG~9s6F^l0^@jyfC-*o!72{Mm5LK`3%?-uoAyS|!gR0?7 z)a^!HuwTa>)fA@DVjI%d+xfd>k>+q!9)SeJ(txEk-Lh|19ec2Az+E|j+yj(U=c5)O!WH83z)7B*Vo-5PK0#u+rsjP= z%R$aEn~!qP;BNUY1c|M1%acHMT1OL^{1h_L>vtknT7u=nd3V)5Uxm8R0<|=RlHPGt z$_($`!U4E8@YkV)yM~sI!s0Egz;%F^2za{G8!TBcE9y=c_?HCY_i$6g$evj#q<94r zmaXN7zt@Maq1Ew zo1*nI5ib8tM~pvl`MmjMHU_0PhPTXH@-~|_9Wy(o!Flgef7`@aBF7Rx<0u=58lnty=SBRsUf zPNieIj8h!6F#Ij2nB6#q9cDLYd43_qX8S&+XhYBiZUNjtz{?gbK;vdsjD0MDn}rkK z`1ZqY_y!iNl);DWwyDwY6TUs5@ebS<5yYKu`9>2H19$+p0-hn@#e2u-OG_{->c$%Q z&luu2IL|~b%*vJIp@rEi4*K^}8k-W^z&j|BypL>(FT__kp@EBO3%n_f@bxQ>;^E1x zoWz;FyB0#i4phURM7@^!_h4xW=78s~J#dXu!bh9e9F>+}R+11m4ENux{Z5eBz}C;2 z!cTfsJhM9@kOKs>1wq5_SFkw4WPv*ZPp+guU2>%{t!Gx?PQbrc6aI6E{d2rl11qkE zGjQJ)!mGX~VuHb}e0!*y;dlu3-~z6#vKH%WR-7%-!1qw#!DT%B>-Q#5T|sSlM%2d( zjIsF59Ed9R!T}m7ospRvsIRq%I_OX^dST`O+#Pt!Yr>PPPGc33S%JR?o@+|@r(@>o z_|g)rxb_~vODzar``16$F&TlCLW(P7yLbJ=50LcUZl%52$&VP7jRn_;`i=buuWQmSyAwh!0SH}UMkTOE9uNiS%`OM`q8pnNPGfS z!JDXWe|uoBpE&^k3_LWD@D;jt2GSDDiUN8APy9ys^0AlPQKztS)jvwN4?hJuzvp0I zsQSR$E0MfYkE%yt0}&d)eSycN521w z-yAgfamQ)MDG-AA8VPHdD&|M(vHAd6;6cED$P-@PuYL{ACBh0k7&x{E7~gMb>;s%9 zgB5rP@Mt~4|C2ugIyewjJe3s}SJ?<^ z6sUQAMD4mhCJu|KaNsJc=FT}aBo+;-oIg=_|FK#XueZVhcnolZ5W?MucS1kQtiWS| zn}rj;?{f2ayp#+pu3#MFe<%F7mFii%ISMNma#5#MLO&~ZXERo-1`tcU7hDp2*(%Ie z2qvYI;PNNypI}oAvP2bc-kVFRHi8-tYE3p#lT`m(hK39WF1Fq5F09Re1JyT|sJh*( zF=}THkVpU?mQT2}WQzmVK4Ik~rc@qb{cIwrRs}>g`kgIvrF-d=u|^K$t7t*#nZo3{~{L9s9WmiKf9j z{TX?GTWj_kmmC_ve*kY1@Q)pKYe`EmE9x>G_!~9iCr(tty~L~(O}xmt9&6YnDg)GC z>O>v3;!Zfq3J2hszza1AkMiq+XBo3XIt#e@3&KA=dV{)WR<0mFRo1Z`mTXYv4TyTN z_w!Ha{NVunC-68E!p&D_W95cf@z~1&Ui?mw{;MzuZx+DHKlXIikGhQd%mr7+ow(c1 z{Bs4`@SrrrXW0V-BVh?atWSfWzHFZ&58i>E*HLa+jmx>80mf zHKtAs8_X9!L~S)Yl2!!8qDWGlm1c=W8K%p*?~eI!fS|$+tqUHtwKilZP zS|g56G7aD*z*~|CuMS*}YtF2==B2;`(+U6M#$R|2Gb@+BM#gA!NR)vZCs6h7UBhF9 zIRGyQo|-`tol|@;_GVTTqyqTIpM-CpQ+bu`JopG3wqi@2x1`%GE?OrE9rohUFL=8a zkoWuZA#bp*01b{h%4;Wkuf7u0v@)XVEr08V#eX;euLAB{PI&scM;S;AR!IK_?o~zj z+r_6bxnWk47F$!@W9u`Js0KArpz7S4+XG_*H~_B!{-K^E9v;>|CN06Nz-xj3Y#=;$ z)OB>=%!-h8z$4^zSs$TsD`yP8^#&^!QtHqxHrB2ORY#Gi7k(L(;3Lv-Ky@|%w^1Yf z-25pR6*DU*;n3UHnX98v<=@dzZG?A-;Qc1RHggFC z-!|{YK^K#r3Uhd|MNM7(w=gvlp>r{@^j8)|#MSqrxbp|gJjK7)5uFspJEd@lR0tR3 zQTNbf4szSyUl_HBLEa~7@k7)kL+f(TQUi|aLVxh7D(QY=47wL*cKX`_xF?Ag}Iz~hS_ex_&&rEOMAiPjqvfUcI)$H zeGGMwq6&hjg;9`c<33sD|-GJ-9418?z8NKtdh3{x`x$Y>!9R$gG^i zYJXGq@lp*?V+88e%MW`=OE3rAU7Emcl1U=vP8gnB%u07xyPcS^r|s6`8K(tqWhQaw zJv)HAh&Zx-G@Z2onLW1N@hOD~DR|#6cri zQ951VRW-yHJc884MW+lRbPUf zuSw+Znlo_IGZ#uBwQc$PpG~{ElYhGpU99r>TbNLaY3(%Fe1$yQL7jDk682^gQI#_q_Q{74M9yYBWlYm``OYG%mE1)0e5jDJUlvj zCO+~DD_4d-Pu?hTkc`VOeRvzg`-=y8yEp1o;lDM|;Hb7w|K`{JbPCGYg0Ts_Qw8tt zWq)ATm1#)%b(DM!gJuB94l7-QNi;Kavg6bWcktKJ=Ils*f2C7d%}vg;dsNOe4ytS1 zAk3u1%ex_FTouRaJ1pFWgSxD}{)>Z5hJ~}w!kVHC?}ajKJa5?#qi~c2xEXMZAS#>r z>)Kpt31-Ds)*Il_-v}Snv&kGoXjn;FZ%OOJN$q-~B9*z_hdfHW`tYT>a;HLQnc{$2 z$x_pv%hRvdL)M4AMcmvZihHD2s3g{f5S^pWEE{$eRC7?9vx%yw{jo0=?%+UF{k9`F zJ~N;E0jdS4j(J3#wXNX@#%6FJs@RCX#W&7Dg;;_bDNx<-uEv;wIRJkLJXXMmJUTG| ztpirzR=@-ENqWva|4W$4!-|mB!2Qb!m$PG^(_>Z&88NT50*kw9+e5+zRL5ULJrSyj zrv!6AbG8Nkwx00AHS>@)vvOIdJ0!RhBsP`x<)dwpfE~O)wvc!I9yt|!{1O^OZTz=2 zfeB9sz5~@BR3n)etY>q){}Bl=2Tt|Y;*aO>XX zu*B4kS%EtPx6>tj)VZBf_+}ccSj%t$UZyYPyKrZbv;?zK7UGNe15~7@bEWNZZq{uM zl3D7^mJ(fA0tO^_d`Jl%TT+n4Xv7V8-D|=PY$dN@jRRJa5YOd*9nrFbi~Y%BwlF0T z_vSvg_%Ef~D&~c_V!m9Tt^c|sNRTN7nXXpZ6{m9%3Xi7uz$>f?m+!yjHV%NmN*d+1 zZ6_cCw*0M#R^mS=T6?`-6k_9zTB;5B(4D&hsR1eYw$U_(Uo+ zgpMzefd2U$x#)f~;1wLOH8) z_oAJ8!Q1%@c^k)?Rp6fp(BQoF&(tTNrappN?oZVFSFd)&-U1wee*$h3O!)b`=PmIU zdsuNu=`-+zc*3Rr_ydDtW+iFy#ya^VRp{GXZnh>?^R0+)I*U9m)N_tw_ZIHLRq{p* z-!zKxIez93G#y0ZuhRE$OSZ)B1Fp+Y;x5vwIxQ{1JV;io)6~*vb}Go1$>tI@<@`e% zyeJ6=NPGb1`vKJNt;NB>>uQ7Z#7AM#sg3JPex0I9Y(x5STPBSaX%Cx<7 zYcV~+4H7}1rd1O4z?1Wjq$QXG@L=GzwS*tsy(u5xlYtfYdkFA&IX%{uo!pg?hcPg$ zBrP_uOQ%bOo>;6(-H}QBb6G39FPnRZLaOQ6jT) zwW~L(NuGm>!|o|^(1>8|*9a62K@AlWJf1w?6|d7n7I*~kECFAq?)?!R3#`B+f%`op zzJ$!14$>0L3Oow<$Crd(ns0Lv(@j`W>CwPl^$A}az2z#-bihifgv@De&aorh-(hAN z1FDW4QGK-kL#N3ch$?p7ryZoGas~O;{Lq;ov8n^h?lf_%4SxGKa!|u}c^70J%fdQQ z*vXSmpuw`>z~g{Nxe;zxSJ8=WM4xz#5`6{!>OJ9IZfB#_GAl`o?|HZfSV%!49@H=o zqN>U-{e}%PIG}-l1D^Gf@PT(i;;`KcE45}B_qNYF-_Ksk56Ax7cw-LQ zd{$>%mt=6iW)pW^V!%jDjo`r*I95AGnD~p0`)OfA6tRA_jf)&UF5~B+!M_hoB$n9W z{j)8Ry{M9cu&?qd?35R$Bhk_joTI+pm@^Fvl;1(k|3y^Y2UpNonFE!^_kUx9wfKj+ z!}{f%yZWBK{IWs6kf4pIw^S&)Rg&V_&?9(aFkRGJ8t{-t!cCw2sf%yi!%C6b%~Ypk zt!G#N2e{2G#MR5u)WCPG;DLgr1Fuwg$vO+0%{Ey4Vphsb{J7}_^-;(0;K~5CQH!WI z7f)P;1Ez4`3URLgg?~BdkJxv85GWJga=PSQ^k(aJd?5xJ9Ccf45B3617O2JoHQwgC zGIo*R06ZJ`X8|`pUWyKnSt0$C;V(&g&kF^4Jm_HMq*o`Eut`@AsFnsqRd5Kzsw{Ir zRptW!ZA|!|erk|lR;tPj@tIy2zcdmWdEjc964zk=f}Z#y6+F-#<^ylEBfS5=hx%h= z0xP8lu-@~toN!5sp;#M8ink)mV({q~=#smbXOBr;*q&qwsK0}VDwk%AIVW=f zUJBeKnDFk|XHlKZic3`nydi|}K$WM@F%^ZCE>*sATW>MufG68zEC*LFg1DX68%yBl z=J232if^=b`1^`{YeB65^+zmGW#tCoLCqYvjCUS%kw9j@Ky4PN&vbSF#>cVXfbnl7 z@VHcxc=}Mo5T}S?B?7)!gU1mkMUjzI@7U`6Ai^QajSt+DA zM?F7R&7P7qDsCIts{DQKGh}Pw{33+|Wx!om@(XzeY) z1D+8+$M`(v;>=3g`k`%8qw1qGEs(8@4d&;X#C6qd7>)ThJc!$_6T7xPNOmxE$~- z0gqWz`2=U4VFfM^+~GO#gA@m%H)mEUr;d^eFciHegJ0Ji^hV4~l`f{dEw}tA(Yi@&2z9KSFs}-6mpthxmx?_!D+4m%vtT|$Uze(1n?}Mr_$4LtXmNo ztG=a-zYN-sWl@$lrQ++@HiSB4x_bp-GP-Ry)5W#t_+8baUQW|%#Db_3R&T{_F>}C8uL4}%p77}-Yi#i`X;_6i6CZOb zL;hIH$@Vq&WN#ZkgL|X{x%&;*$9f7A!A-9UJm5Xy&Wkr;XvwT35%o{&JyB6JUwC$j zH@)TqP5u;K!0T-Gq*sHWtOp5RKNBB}odC$93ert2kFbDpc^s~w~=89_hYA`#ytqJ!E!M)SveJ3&ghX_%%&bAimhF9iL zc9>ZU+^j$$)WfOhVwneV#RV4kQ-2E62QkrGKG(E~mC^PY`RmG4>If1CU-7>TM-wF0 z+w-U2_zN^Qp~MA+)A3pw06YmpCM=%8+w`CS$3%>Txt&^mCh3n%xPm0kYD zmOVtc;Ahw%2wM@L`bQJBc*FY*_@W&gIO^K#E0i&Ad=BcDHZ^=jiPZM=#Kt8jm%OSN91firKj zJ*b!98h#`0pf~?GVoL`e6i)23Rl8a(V}Bmd2lqoZaZl#duEpvrJosD0Uan~pm#%x% zh!aFJebd(ajQkod%m&44cfzsj63%nKY3+Q1#HO)FuS*_QWDJl?em><=nmGlJAC?hO z#rDx7!1TuklSv`42Pm06{iD__wuGkJV!r`RXpccs( zu;;sPy1pqI7aTa%$)AT^7jB{OwhOCtVW05wO}jn45BcG+!`hVR=# zm~TH*g55Tts?5NRRwHhH)(uxo$>9O~4e&;F!j-QCU|W}2rIt#*1s_?AgnZE9P-(+$3}S*$ty^K)lW;UnmL-MItoXF>4jO|11$W z&58oQwAj{+G9o;8_0~Oj>`A$_`wKuwWwCiOq z(Dgxi139QdK9(&&SwpbQg#_2s^*fIF2xN&WPX6+Y@{~F6p-VI;a?mhEGb0YF9lVRb zO5-iY`=cB-2y5|)!me5weF#%Q1n0avoH{P7>4{e_Fvv|8fio+YLg$b#%RzMp)mEVHFCT$NEpy1I@B1rDcD#z@I2?KWrp81nPjXtGhC9X_>zHJL&|QhI(ESnIg?||Dt6Zjw`R@m0(oj#CELy#E z6sBg#hXg;geS^g4Txtg@$+Pmdk}UK$6b4^n2dxyg&XqjHQN{lw>#F0r$iB9&=&HM} z-MQG^Vt3ctt-E%2Hz6shpma$i4U!_#AT1yvASx-+4Z{1}Ge5q==f3|w=Q+nDcn{TQWFg-$dJMO4xIXs%8QK>?Cu$vj^y;w$NG^_+v8W7(jy zY!crOG2SRrjH*5BYH_{-BB6%(16Nfh{8mZCUff$)ISKEMm+kSg3IO$+I#G|C1!H!c zIS^H>AWyx!478(?Hr=v3V z^0DYt;O$u46`gnMDuFvG*HRJX^uQ zy&MQ{@;kd68?0fa>(UhGR+ja)7aj$1zNpLI4L7;W#*}T<;GjJh{D-6PLJ*|bg@SD8 z>tKwJkq}BKJl}C`^;~gQbSvk6;pnG#$UPM9KCa|`Ro-e7&ftLv`i^11`xCns*imu1jEwTlMs98I{);b1N7 zL4uW3#fNusNzMPB0^w)6YlldU-8X+U$J&47^;iyy-7u&X)$0Rd_Y(Hi=8A80Ui(hMGoPMZaAu8PzEa|UJ`&?mJl9sdY~WvF#s!t zYd5`GTzz~JR|Y-an#>_u!YfI`=sz)b4be)bv^^(|4|{~7o+ctnTs=kkG+6!?wwxmt zr)ajYDvN`>RAYr#gLu=PuNum>*Cj!)x|sx*UtWR{3X?^kkHDX38nNc~a9KnJzWjid zRK@1DuDQb_g2boEs^cSJxm^r2Krf%2E1e8MXDt#u`zUY_Ho!oZ6MP)FT4*c97`EPx z{KBT@f@UQ*;57&QYyTy&B*)4TjlTgt1>h= zYUb@OY+>^gs9rWi{XVqMM63$HfuqjYxO@OEG7VG@7ov_X7=Vjp4nz%|-gYNfPde6( z^FCoZVhlk(64u$?4s73jIs`v?kYMG8xf%Et9G{PumaC!A)|=@ zH9j8QL}mq^1Kd8A@DcU{P|uhZW$^{L_D90|*-Wg%unku3!kaQ?b?2bF=luTVptWDe z9K|)~LNGgx1j{~sMGuR~a?~J|`cP26f*Sdms0K!spfU%JI$~AHD5Uuf)Q<&3^?ZI4 zX)*_nTHkt+|624!ziF-<>&v!9ttgN05PVZgf>r0IqKYzEJg<4cT^b1=VifuS?KZ3= zAs#m5reCU0kl0zM2vM(vcRsxHWQ|#U?6hTsD~_6n2A9B*mJq&*ejOYmhw>_IIAHA9c6N%f{*(HO&lqxS2m$2OD{fm-!~s5>ndg<`QB4#10n zdl?bl=W;^|Iuo!0{{cMCgzyti-?m9hF)Kor08e^F_!*Tgm_K7yF64`~qXt3ZCkts! z)OEcZn(-+E98f%^z%`u+Ula8d6MM|cNhoIS-9?bNx$FMJnGWb=l)<~gkGv}{zQV*4 z)1XG#wOG<9=UK?!BX_ZByA^jpXaGg%P|res=xAit(gjypjv&f!DaeyW+x1Xo5sC!c z-R#ms_IM^MK-GvK>euQy7-caB?rLVfkNnC(k4vLeIY|9s{$mJMLeSy^2_D)xY&z;F zWI3w+&|-ccK$Y8QzMK1eXFqnFTNMNiVoC5(y&D<{CJVe8c$t9fu6?J74~$_2UIYAn zBJmHTZbzkHR^YY36+aUG*Wj_a*dPQe@H*g4$%IF*P+x1`T`71c zOgfC6FH8e?3-F)yq&lbUw{WaX!3w+;xOszs|80cnGiC)Y>xf3?7vUF{Z<+=iR^W2L zV_OJMb)3)(+l^qwLn#kDxs~v2|F7LK^#LoTC_a?dgUiQ2LIG4GSrgU*br1c3Ss>;B zi6_8g6baYA`yFFxX63F@X>^yl=u9etnyyULm5*nYVZR|9h#L8C+w0M->Hi(Lw>oY> z4`PXf!od?Wg(0hWA5v$TvZh}NF*39%#=!NtSeIduIB&m<9jrZ42G#aCQ4NPDnxQKP z2jD8eYjg>peIugqS}d#@v;Vit-=HNc8W*nyZ~a%~ zy|nf#W|El(=bh(-BTBOb7G8<`yBaRWMjnA|B(4p#CT#uF)rV>&Bw$xA^}$i zu4qU2^W-ywvFZRTa1G$u_JsTQOTiu#W(BSZ+}wq53;PT1*l7qWNH(5j_Pc?Gq7}y>nmT9-SePmIb`xEtGk^BvF0uY$wi=h!(!*2ypJpXGYa?c1-#?4$@`rA0L=R{4UYPIpI@u7 z{P2<$Mh;QaAN=(ZA1%Uxzh>q659Ptt2RAN{xH78WrSS_oco4VUU@fPqZ!J3|7iX2n&Q0I#nh+i zxVxA1zlLr(JaBbpz)c$nzxL@sJZA4<rNEN%jJVTIJOHW?fUCNh%z0ZB2=@Tn{^jl+Lq$EOl)lGuF2)#%z{lXQ- zg(M3jT(lLktI(kA8W)eo%mB-gsNz!*Fmz}#=iU9}xIB#Bt>LYqPu?MYyzusB8kBXp zrBqu((&={aJaQM;-5>m8$3OkO|ELKkPgily*0L($F^bj(QOXS|O4+bpPMEzwEZlQj z;F0Ep-|gjk7Q+=-xkUAM4q-d#?Ld8PNz{v7mtvlVIj}Vv;C7CLAHCkZ4zoY7l7x6C z;{SLeya~k;`JPy;PAnhEDUciIj1>kuBFiB$^FEi(kqe`?V;0*1VT;`;Z21olOb@Z( z!rd0Po1}i|Bm82xU8Nh7e2#5`bcDZ|2l>~i&M?90AW%VxyaxW#lklkSUpwHmE?6lA zF{@IIAAu@v4A^}mIOFJjUb4qUb~3(}2HKb=9<@F8k*od(uenS+q6gQTC|xO>S-y7g29|&LE`rq$pGhwA@qI6pB1~v`v4QgC0 zQ8ljYe~M#~;lN#kZM4D)MDqbPTcE!9y~{CaDdqs&7kE${N%*wfu)-c=SRw5P+$E9l zpf38rnU$pNBy*b4n?2ZfVE&-mrV_O_`foJQ%z>!QlE273GT&RtUBkM8vFwnH0C>9z z-sk1Vf5L|f(CBW`vFlqHvhqoG)wVGmae4;Kq#;(|vwa?p5uPn^&G1yR)l|YFgC)<~ zhMlA2$W?4OpAB;nT0;>!@iFi_$2$9_j_);8^|og{n?R&zQb_4JMg360+9{F*{*GOb zfFC=XavML6fE9QUaP=R=zu#dkUT@5bUhsS1N@avw9$ICKLlR)+ifVTGt@#9rhxi$G zjT5Hx#fM_lUX^5H&zZxT%KQyvp#T;(DO`yVDL*4Jk#@@49+EiEK$Xw z?%mRji}^yjl-IhGy?qklUu{ADS$D=`w9Qn=UmRA=bu*hx{_U3dUN5g(#nBdy(nuo6 z@>JW~r>WB*p*0W}%q~wjX-F)wXggf5`-LUVB&6c!LaCH>IQAIZn~@Ml?XgK`1qYoS zHBsnVh%Ju$A+;lvaJwb$Eq5;ogISSQ)&HzH9;%OsYwAsLlLrLMMz09b$=%NF_qHo} z=s$`5VIvt_vjE~=JO9`i)fgU>kSM#kYZrG=Q$SS=Bx-ceqj;|~2cn9F(LJcF35``M zs88dG+UnE!5oVj zA`w+g=VQa^bk2L<&uB}6#0Igt_#zvdra`b-5Iiy@;y26`Ll*5%I&hUV3Z%L$bT2;8 zhLw{TdvlO5@hYnJ?~wm5(#(LjNfvp#->Jj^mT7R_la3ZW=AeE1$CeW$-iGOqzwbsm znGp0XCPB61**Nop$#T@$|1A(EH0vdQ20Pj~KNvUhGrSGT$@||=*_a1r8k~39F84Di zk1S9t1?uW;R_J&z2jJPj<*G?yR5xw3@XU&ybPn(cMRV4c?K$=ppH46K6j`->tR;oym;gY?2 z2lR&Y!9eIcxMhaKJ+S3c9Oh`?LEJ()3HM-=rtr=d2ajVEYdUckmc2Q>fjrAIC7##M z>}0zN^AIK2jG~+@D)7LxFJj?h^MQY~CVcnxFuZb@m1M;S@<{XV13)bRHP)7>btea7 zkjos1D&CX&?e|sjs1<^0?@ZL2!C~KV>MI;L)s#USt`H<%(rEwH?DN(-u$Xa!h`ZQ-1^R}}gNx)i<&RMuwEn_CYl6hK_e{s0o>X}4 z#!U4u)(T%2wR_e1_SRk~BqLe(dtr|Q8E}>ua#0GWT<)nvX`{D{j5zA}b5+9hlGxVF zYyJBm?obK5Wh2P@^5`B%@V8TFpfr90&x|8{#EzsJm`Q|{R9z(#ZvC~A*^g&RLDh^W z>QVE|d6@8o1D8P90cRWJS_Z0WB2f!31gB#d2?vgPe#N&m4m$CVEz7l>c_)*%_K2aw zu}2jez$<{aq!Zp}Zg+j0ISnh@C0_}{&ulUro;U}$l$kkgt(#>+BQD;PyV;3+3pM}R zXJHLTWcgMd6vpl%RDXDeKgo;GC?oR*TzC~Sd7n?2Z0I3{9m*^pE)%uFa65v;Iv{2A zC=exF4e!7*^4=4jhCx5m;JhD}~P|!>Un{6w1U`q|g$Y-cM2*>wm-Z+f|RuoDr@aPwWFKrpvAT7nLTms9@53o~KWnZI{@RF!nm0KQQ z0Raxc<$$Ld5niyh9y3(T3S1s|gDK%}9$l%%tQ)Mr6@X`05)9dn3Yl#ACO;1*Q7u~3Dj3kM0E+>gPt*S0Im$&(V1}j zsYABoEEHIQs{l80A^e8gsAzQgVFj)VJl>7)6Z68*@nTlsYQQ7B2>+ZBh?b98QG=cW z&v`?5pmkjp&X9tYYLIKDX+6D-J_NhXb4F)`OwCiVUF{X}vJ;fSJql zIr2gHBEQ{-fDfH(`Ki(n&-7p}@Rh95 zpHN;e5m^2g1)eS)iFXwX4_qI3vaBU*Fwb-=!ONRjaVrdf7bz1yMDz6{3}IpAq$ggP za10WLpng*!>W*^#Cm6H90k{$HFb%>l+>^obG_yk582Iz&gm2E8iXJVqa?%GH{kLKu zZUU;E2~n%%`=jMz4pdz2dQpALp9sA_@zG8`c03j}(-iI>%*ef5z4#5zVTTAs5}#RB z>4*FPVOgf8@WhCMYFD~ep{AKZu+^FbM=jleB|;`E+&=M4hV6UCUgd&pv~3k?pX>g% zv9E>2RbdR6JfjUda6ES&%Euf*B5Wwg<5@9 zptiUX)oI2Zbj6v2kdHWnzvH$`cOE;rtok-#+9{HW$GZc(9k|;t$KO$?C}K%$yQWgi zx)YWNUE@!o`;VA`QB3yVQmYkR3uO;dYZn$_%s~}(bdU{pDx`_DCy=}-=Rcu>(IZO*x)jsfIakCQDRtka%`P)_WAN1E`S#Rr!nx-X+Wdx6KiF zQ!Pm(DBnaUgIP&JTyU#%`Hi0w*yJ~a{eI*%yxo40clT)7c#Qp_LEhri_DZ4X4nbnK zpxfkoPDtMg-ij^cy<|!)Iz&u^sN#(rb4a@eMdu9aQ{`8z375H1f_DmY;HaJBcL=Xx zaTRD+?d~ux9eIU@+lcJ~!6Xe5l$P225i_@t9U9we;Y ztDsx*aBoa{dcfbrj{M_#|5$-pBdBl}P~O}@ic7SlQsyhiN>w<@k6Zg*KP4=Qw~Jew zvW)GW^hDe;M~eHGXD&*EMaLcT0&e3&_$bd6XRsj-RxZ-I)}S5)iLZ#*FAEzuR+Pz^ z-_aR+1HtIGB>3u)(RsWgAWKy7LE08@obT}+35+u01U>$A^WhwS^LAK;7~Y6s8cH#o zZalk=6SNVDsN#3#br!P1dWF7Z0^_RPl7n1~){eEI9Mox;njW4sAH=APq!@*3UvI`s z1d%wZ)Wz$2P`19HYDW?E?3e`$@T|ZAW$On#B#!Xh^060Cd12)wc6#mJMv(aQPtVH? z=U9g)Twxo?{2^E_2+C+J!vKxRvNv7;4B6i)(xww*TTm@vCJl4R%J9B}C)^1V>-a&B z1BD!P?bel4F8H`j-v@K7y@$<(hgNKV-TzxV9k=E!GEpq1OzKQ#qlduq;RFwPJLYnb zQKzB_95i!)!y*nU?s;?^iXjj&Y)dG{T3vO-V39D#_zt+coE2+r%({+{!qEV*auVw{ z8g}NZ=Gp0)LL~7C{dWEz;os@{nv!?zhK@(dFpnFAD0M=Vlbyfp$B!5hi;Gfuy@N2u zZdca5uWJ)a{EDt#?U^(|;*Kk$%zya)=6Hi$73kl+N7&aIbaC5*R?o&1CW4c<7$YKM zk#G)kyRLYI!8D=872hq>hRqi$me}ewWQmftnQL#8H`I{N@dzxFEaol>7)1 zy@%)g@2{h8B;OevFt~M{jd?<#sG>uPnYzIl81+JzZa`s+(gGvuR9FBKHD6-3ZM%gVfK5vgPKXN3hSg5+* z$M$mGveC&gSVjzkcg+j(ezIW^+D@iH*Ve8h7a_BC4Y`ZuAL4gRc)f|xja9Xgc(TKx zSo)F_r+O!-VS_ew(HKPlPd6moBg0S$y&71#r1bAfHGvuls*^EM%a4B^ijOAYz){bP znl>KPC{X>)h?>yf7txplN6mN=%YFnF4Qio4y%%+R19}W_0R91Zss%~h^W1}(J7xtQ z13dT@;ghzlMuWtxz+-`z3;3@a_fKH?8&=?Pz-w%XUs|-lMp}wlfyV>4b|l;(ajG3Y z=Z6(|0@HUP{F~N3TqU#Ok`jUExDu|`hy6;AS-DHn|G4Ep)Z-*jLp_KZ+^y>bEcL*F zsN%i&uxUbA8OuGBvF8TCfhPmc z7x2SoD@UUVhZR?p0zC3PrK#6=V+v++VI^s?wNi*Z_ctU`LG=qJ>WsjaWc20X0Q?j1 zpfJMc>!$hOAQM>e{H6ha7f$%zhzzV$F)K-nZ;f|@W(%tyVm)-USSK7pR9++LQ6JJc z&b|pshoV*#Df%DyS&x4TK^KGN4B+mGgr`T0xQ(@WSgEE2`Agc@vrFXp!hYmbUW#g( z3HO#yc*59`BbGprCb?o0tpW*#Ele~?ej(m@$Cuoqjc)!MsUe9*H zWq~U9nW$6C_5@&y5*&bM1J4ogE!wUa#xX0}%N*eLxx^1&Fb2#1%*x#y#nyrUTk)5C z-s*1}^}i9CiF$W%XY@Ll16Nr2C7bz1^3A!r(@5YOywjSLZfm8MD;uD9bssPk!1}cscM_j)b53(-+Mvv!bvofcv=; zzG86LF8q=kR;~n#K7Xr&L?x&ZZbY4xa1Gra<^a43c&I1gZ#$VB!f&}@g>*IWVt>NN zxs1c&8MAWtQQ@XzCa5)_mIf15OFtIU%z>jGK5$VFljXIbw!{;)&~x8RtQWvRXh_6a zt|w2j)bYsHfh+fsxc1BMVI;ylI9Y?K_QGtA*t~_RJeq> z$EJIHbO;{A25{ehCT>VeWuCMY^Wd|}9@BDyi(YegJo^t>Biuh_k^6>UBi3U3E<}Jg z0T0Y3{H9@PGnV0C1>OwY#PxqWvBe8{Q1k1FdN_O`<_(wwa0TGeErbWO+CqX^fjUcOysPk+LO9SBn!l91 zcTO(~5w;zPuY*;c@@$cTGTdzi_seB#-r}$Uh~UXm0j}_pWH&s25s1ZVSh;(<+BBJe zaW>7~$+}&t@UAf+Z};+5c$+Z|@)i@=)8NIvU{nLu)RL%u)~f1bGYcHJK)WYr{Y0)$ zLAAFb>b`DGf8gfB0TSxK)0_z}+Y^JE%&eTmxoXoGP&Gh(>Os_%fBgLj>l1L`s1q;T zdxx%rCaC7oMBSonosF-d;6MdipDrob;P2D;Qi<0c%dfe_zCJk(WvT_mmLyXA{4)T9 zXr{{rmwIu0IR|}psSQHv+VIv%ChsHm3D}&(G&t&vUYA@@P&%L*rV@3l%l9ViSAqlZ zXTYn|2shrso^WQxGxQvIV;4M%dvts_ri0NzC(il5ybP=|I!%FGt?`*4lV;4@lBeZ_vO#jE&&{(30&-kc1l^lX( zC8rU*y{yd73-ip!W6}i(VFUfP@wB9A}bH@;&V* zEyb*yL_?po+oX( z;Nvc6aMWX?_g}#@hXbhLu|(}~^snBypKu_m*r&TIZ(~l+*HYj)9D6eM`(C3oxtL@1()o1)Tt_TEE~cyAhC-pb!LxmC1WUu%!ylDuD*)t(5q`pS_6b^tw2Ytwedi`;!KFJKh}>gV#JX z$Xg7wc?Kp&`}FDF^~;+cZLQ~F8MEDdVb6`%QN$DA3CTEZl9XL-aZXx_31iaL3%H{J z;q@hsBk?0nSSgfP;9sWC6*kF`30dCyu^~H!3vH`uGC(b|GAC{PHX`s<3jZ_dAVdJ!n5rBL(WO z`DN9Z6M_S9f8beef`p8r9)^mrqK*duuk;~YFDmINF6H#%Yp2eL#JyVD&9S{o8nzq{?3DU~l{ADslkJ1~&EtICFxzqR(1|`5DaEfHDTRdd>(RI`&p8w2t5xo60S#t?pc0z<5?BPNL>1Rs)+hWs7TwtpP~Utas-nsjG@;Ca zQ(bED;Tc~q)8oSUtNHuyK2;c7g+fs;ofKtf%(cb}ICROq-2!uN*XPS{d&0o=6}T58 zw{1lAg$JIlaNy}*Nh7`Av3)j8|Sdr}$v~X5qh^ z?cSu964uLdw1~BT%A+u%5cro6_-5Dx%rjC8h6 z*QG*kw*b1Ze*7Y$eYx638>snVkN`=h%fh4G{Aw zdwfn9gp0*&yYn(X%Y3xYS-wj@KV@GhTu2h~bzpGIu^dHhBKR50c zbXd4aVl_Hhdtoq%iI8vJz4;hkrXt~&rj&5%aIGkuc7wEuD&Ce^HS>i=SG;-K_w?oG z3ObH(5f1V2@t3SpY+E~GDJK?c+0z6?{|RxQ*izhXyE0B;Sc~Yw^-4BaR=UpJ$$2L@ z2lEfjxSG?$QF+oJ=GKOWxvNs}k;hIVn^gah$BL@#+>A#8`R5WP-{c zw>4m|E$8h+*69dh0;vvoi{>z*2d2%ntp;3aBB*cD#_ivBbXJVh3gbz`x2hG8XAaj637Vwe) z!X0Ow#ykkKa#<*LJi-Q{*`U_HC2IJHNQ?oQ10-^Qdj=DpW?P1dd1fUE-Fs~%lQ~Dd z10=pMi7=x6bz$y8X({FaJQuh^1mXQU82yLsF0cas3cM(e@Y@4#V-&=!2>A{8i$ubw z{I&EBe$4_acj04#S3E=?;yb9{lZpC4+ddN~y2F8}V#yzD92v#m@er*UC0sfDJxa3# zN##MYQBZ97+5^FvE{1IRz+F-)(%ix`YUt*{O0w+^=GTk$+0My^?O4dZ{3?LEb{e_Q zTi6eyaVEl1JD1jn;F=0S)%s4*Ktpg3B>u&DGf`rD7<)Y9__S zGV3vA!E}ND0In$Sz+PWNPF&c4ZN;$S@=JhcD-%9{`~~#onU%{R;J4quLE7~F6bO_(pXD=!@vvS!*5AHvVgKot}`NO*m-X^-_-JJevFb;`^21hma zvgTJnI_L*XM^5GNR@Ni$V*|}CGa34!j%hOf5+X1 z6?hf!L;>IYR2vh8%!=Zv23~AR{I?VH(G_M^F1u+Hexr38P@8RuI$`e2WGwN(fvDmL z*LmW7HC%HosBi3v>iNL{V>9N!saC%{*N1~THhi0dcCHTI{?6n*E#dG)9DN84qUz6T ztN1D2BRdjQFWK=FnI6w~ZC>VfPr$|3L-30W3GQ}ZlZJ*9vcMaFTY3=wo9y^Y`1lW2 zB+v-lJ%DhFfOTW>`x96xn)uWP*+1i7t${TuMI394oD2IER}%!kza_zW4~B=~z$?fS zRcuhNO?}T+@0&sO3npre$)6YnFb7Ed0&WmOcy`dzF*uqIRxaA~;Z|~ZtG0mZ7Ejco z$lS}AQ-*`k4vAa)7rt;6-l5_peY^kh2dC)!<)Fz8MGp9 zVmifr+GF}YEMFozQ41fo-8bKcb2qsdGT-i2a!{8}s-7HV`hE}F8YAnBRiX@vvH!S2 z5$4wsiKt?R)3=|l1XT{yz#O738hRXs&Kx+^*S~_9sywI(--+7ns(TBk?!tkn0g}Tw zf{K6F#r;tLH7B2_>GP8nP$A&}{0VTSLc+UM1mc~^tiTn4>lG88dZd#9dIqo}q!RFF zKM1cKYldc-S-A_5w+Ot4sU>Alb?b@xUv3%(70iL|XS*|jqux{rGqhqkR8;ghE8KQ* zvGh}U9ov4Q0!jG>lJwcZe%8u_fvW;nZ6;jN^lB0gFo6~Q8#Uk|N{*~`mCG8x1>;*- zNxR(~VM_Rpm0bCHjrIxUF6!{0UB@_R;4h_%D3YfLQm0NqoU+UCR%W3%s>-+*t{88t zgDR&_)bTF&L$F;F4wTOqy+Liy+9lurCgGYiz_m3XZu!4bPw|T=cp#i6a35nKTrWH9 zabQ+1|4#G9uumDaKy5T3>f3q)e9Gel2S{iG|7b~g|GTY9XcA#13GsM^N1dEAA)y0m zg%wdxE2;jCPXpip{2A~jN5Uugd!r3vR^ZQpr#Tb;Q1j$Aw#e*#3AirsH?D*q?;D7T zIc7zZs|Wm@JK;{@r`7R7fR!t}=QT%nbCCVs6O+;6y?}S}8}gn%@)m|OOoO9(PfYoX zgJOS<*u+7ux394^)0YtZ_>KfqzWbt@FjC)e1Qj7PA631YQ_T`0qRBKEtsxumU#%9ur6Svk%+Q@G~oLW8kR*KK}SV zEW9u)a1-F+Da0Sp?PU)n3W5;x8lY-g2b~-%0g6*6C@7HM)vv{gdV3A1Z7J}Fxt8aGvQ2@ zZ%Km3#qbYPT*uw!$kQ6`3KitOLVor=oOb~c)D|1yRrQ2-?s2{ZdrDyC@|@+-I3E(W zpsF_zwL#kxvp>uMxE*k#UxW|b>M09o zD{x2P@lRf}_AJ>iAN^8h1^ybijS}JJp+C{oGAnQ=;0XeLe4~v$el`m$9sp?neW_tiZh(-;eOC-FzpZd4d)A8{oA9KGNq38c${g?hQP|pZH5B3_>58S@8n# z0sbPEaJ7BiE?_qZtn^5=`*~o4=@dQT^5?X*;hRf__9sYutu_27dz6DZS*^FmET%7l z)TdAo`zKxJp@JY31#y*^%nBTo+IW%N#g316<)vhSCZ4soXYHa!F3KqVx#^r|{M$S1 zF8Cp^ZW;yNd2BuI4hxTplfM3?pxgKVR?^)hLF{X(WV+ys`N=q?a z{x)n{wPYG$?Iede%d%;&K=|jjkiYKgYw75PLIwCc;EM82RG(Bwpx4T*z=ME4RUka9 zI!_1n306G$?}1l7A^hr{BlY;O7*?*h51&~pjb3FisCkM+eY{8oROY}HLdIN`-#MsU zY29K@P%iuRE)ME_z3C*<3_*-mAx4*8x^wXLA|fHpP~dV;DRzftS}mw8uyTQ(cCHx$ zi7-%$1!|(%!hf;I3ivx0FGI?EY|mG*nq|)0@MHtqP9F7g2_?lz)|DQ z-xm@P>%&opZ}BLnNO+gJk@tryx9e~&7c|JbT=GdwjEzpBkiKMc{G4$yzsT^RrDp~g zc9GrQF?b-O5W~WqVhn7tMzhHxaa5m%Aim4@&*?~^uB#+Vp869pCTz!dG!$R?lVX7T zYZM#PMOl0RUJyd~oP|G2u^S9lF48&8V4uAka{eFB*s#ZtquO2aW)-7q0+|z&rKp+ z&RKdXb{4@(k=lLHeQVTNYl>udr>)YTn2^@Q&g_bZzw2l6?`Jsg6uQAs;V%8o=>z%% ziNjy7X^jy=trhpWb?Ec|W+k@duNf_fNsgUKZ!F>aVKQFZX5isXKq}9&DU~}h*-e-y zLqg#m>dD=o#Wz*B%{ z7g0`QmCMiKn-U`ABohASE-4rdyK03`{rJ+my zIXgzWqK$?MB`Ur-R~7^dLuxV6!d?p9ahaL$t}-I;aog%qmP~^yB|GD=Z@l239xfc~ z#xPY~v^}38sBBJx8y3A^j%~w`<)|5E5yRE#txS|i?;j@2YRL87bq-ewV+bE+PPB-x)9$5ytwV*-DvFtTZVC57t^E!~?-){4aX*3)0Mq3ZSKOQ^ zOn8glo6h#2Q;~P=@aA3=-g)k)Mk-x7LwMB0FB~ka z4ha9MZZ~Ds)No69f2*HsYtrtWy24JR`U%O_I+7e_b*LYvBOuHr)csjs_7*M$HKKv2 zx7W*|t}q8&QyFkgSr^vKei>_`kEI+~ISFZ}(sdm4GVMQ8%rBM0TVIL1R}XHUEKM4G z_3=;dS%LR`1-QYg#8v$H9n-DMgOfe|e59~E+3r)#d3}$K!39*p{i&MZesV)cOszo# zcolGyr-V<@YefU92rJ5_8hDI4;e#q)nPA}wRxX^w(IL@j7ivJ&G$!hb&nAztn-va3 z6`Sid>QAirM@+xN?1>z0>Q39;Xcuas*kVqK%1e`9U#73Nmy|AN0mqD2}_zV!beE5+7#Y0h9UOa;kqH{+%;W<|@P|{9kF*rK5RSSo>XHQq z-Rm@*?Rsi}cl8_c?yhCG2K^RjaMYbIrP*H$8bJ;9CF=L>H4|_;100Ad)>ESoJ0n1C z0#!YLsHbD6YvQkBaNt#U-(?9jgX;T^sD2Gs(Kay$j{3{^+-N+ezd-#iP?NqqLHouW z@cwTBt{XxU4VzBq<5(nEIf*w5&qWg?E+Eb6wEGgr+I}sPeU#S|rH|!qaVS^V2MoqmWPq^<@E3|M@GR8y3yr z09*~Yg@Et(^z)LIVpd2$1)fw){PCu%QJa~Sq{aSj=|H>Qs5R=KKCL3^2HmxoIAjh) z6}LHAS&WzBuC4r@gCP>ofcI;```D6-V07o80aZ=l?$x9^eDQiD%&a6KZVY^EcZlx` zc&qxcnL;giCp41xSm}4zLcla|S=zvTO_m#Fb8 z;%;NpBOHM10k_p7e9^qJVjSrYYxlyAU0=W;XG?}97DJ|Cr3+?G+v~~B5Q4-<+U&&P zCG?hPH&`y~a4wSb9J>8~8@R<*dES~MeA~Sw=ultIvB&JwJvb=aXs0#@IX{b#;h^fn zHhkZ3`{nb;Q3Nk>rS`&=re|)ALH`QZi`TV2@E8Xwf%54ZC^BZHYiqY*an{%c{#>NB zVKwa3L<6`t3hsqHm!l8PM1UItS9Byr$b#T?K{F$LZfO8D5YTPW6%v# z#LUWNEamXkhcak40Lz_S&c5`ugu7loxgVUrFBt_9DOA*%A(0qd~G4-Sy92W~3o#+rmZ zR~&|+-vTRF#z8w2*^ks5K=o1}YSxQ;J8+IF9Dq9luT&;{wsjchSD6)U*lXa0s)YAH zC54ueSxH)KZ49=pn@^Cq_BgWBzyhc`!8=opyceyhZNSkk1#79 zrU2k>(S)ZanD)n#0<2u=TJF8$*?ni%x1hfMMAQqZIziY<0EbEax^~2uCffCv>HUol z&l8soDx*r#ZU#Vm+|sU`sNcuqA;>EbqMy=8v~jQNPwZHRH1K!8gE9!;)jJL2DrQ9; z3<4hYo$$-Ir{_saF)M}35bNNVgEbq$eGhI#3302mR-sK~9>i_;dbxVm*cMM&Fu1Qv ziMy)tkP<#-fCrcI@;~SD&`0IsZfLVY;B8t--WolZqS0X*6scVU^!Yp_tHcB{{5a($VLslsW*Dr1j4c%~FjU>ex;>odtREZ{QBbi6f+^pGvOd}BHix8$` zz*=O=f&q^N{#=v77bLL55t$WN5C#0T0pYHGE|_FtRthIJD6R#)*vEj;jA}*H{#o}h z7+?+@b^n|{_#WrA-8cFofe-L*61-=)RN-~YG=Rqd|71(5pT`b7igp-QBo+(Y$&v7x zj&t0w5D6AA`a9*C!#LA(twdLbHK1S9=M{XAhAjZRi9Z&LcBXaYTqbu zQ2)LA;`v8IMYU81krJS2D=21ZP0m6j=wdjW2wcybBHhqqR!;W5`TYZ2{{OCx zx=fH*)+0=Y^D{0DuJ5YYFMW~_4C&;60!S(JkeAXxYYr<(h(&(9cLQJT_nu#857kfXl468QN^iV`$^;GI zX~18`5`K2|l`}{TRzyn&u8>IhZ@sUC;N&-0DVlg-nz^$=2ZF@Mc=hgJHYUq}w`>x5 zUmsbXh}{;@Krv(jcSzq+2SZ3uU#@x(~LNoUnRQoidYKE@wi62J7fuj!Yp|DYS zM8q?AWWF!<$GS%r-1Q5|{r*4lpKvk+M1-mkC|Nh3{B=!GaEtTe^L;~vgOSM=jrcGQQ@!m9 ziSM8`)e<#HX%rd`=78eO10LQ?_|(DE{={4ctW-X-nRDBQ$9JdB;g_d!C%=3F*?hR? zx01V5m#J7NWFo)|fd7#9V6TQtgB3CDz^oYc7Xq()LU??rj2*hOuu{g6OWUFquiti` zyTJoT%-P664bz82p$LkYpb81T*!BcNa3)Jsu{K!BRQ15CxfoO*eWLz6d-o6g*$fVJ zsoIT_&E0Q;c8`bb4{#j~h`W9CO3Yd?50Vv2c7@0N$*3VEpf;Kib?C@1N$4%XfvDAz z$?nTL`x|lj_kVKE4uO8c+rgZ?UG&|DV>S&M9Mvdp=5A0+LH%q^RD-NL#yGwm4jfgk zb-o%-1S-NkdT7Ere)Oug{0%=<5K^YbZ)vQXb!!Z#r8oTacDysn z5!T;>!glKQ(G*`sAUH>T+-!Z8gZd3vzKw%I%4U4vpbl1zjy;7HDdqsY2Kd{zgzLYlSdGJVVZ}?N7Pw&;;a>H7@8XxvunINox#Y2% z+IyMMwuq0{@!|>3xeVU^SjRd(bx^Dl6eFUl)G*TpUEuY=-6Dkydhh;)i+~k)1MqMG z|LyReKx6bfwhCd#V;}^-P+8#!ORukm8x$S;=_PQ$UTM}E=i0R#~b64-vqn!Ootr^KBrc!c+ zoiwoO&Qj#d)8)qK7F^*kaH|CFB5#f3n7M!lo52PCIh{0u4c&0%%*usZJH>||->tW_ z`pU6VmuRvL*{u-t${<18Bl(y+WwJySZ|J+96TOj>tSd%WnMBVqSCU5{Q2fQ_x z@Td|0;HAKz+Y(+esgl( zBlPHD1+EUfB`>UaMm2z|>k;meT=fv0YFOzR4YKId_S8on|27(Dy=sEn zIWVISM2c0{IhKrU7pzMa{Uq~OORLrm+amxoK2qKCmBTD?lIwC^nJ5nr#Hu0kt5A^6~9FwGdA!9MHT!10EPocroAO|dZK z&0A`q`W)WnQRMxb-djuoGY!;tUEme*grB;%dlXtaSUJ@j25GaoT#Z}q3rpYP_@PhQ z-?9j#2SN2j68zTNrwqr-18{TTr2@XJmrAy@6te=i z0G?Pu{K8dR(Yt0=;FiGks|mmSULEgjW(EEVxM3~fO|tzBFa-lE9xW^2w#`CZgFXYK zrI=MHz$dSIohlprsuN-O@Te+&&faD!eD*Y@;@#W-vf9>DE^TM77=q7Djp zRlo||0l2q5@qhn07dL@faT6SYTUrtxyj*%6z6pR;xI#%+R622D0Se_2#@j)kUp?eQ2SDu5W zt=_{yDu%A**yHR1@9?+e?YQRrLadQNgNm%(q<`uy17S=r_7(nmi+>HWvuD~3S;F7^ zQ%_MsB_Gk{jB{$@0^jfOTn?Axiogv)6!>Pxn?@L?Av|z5;BVg(K4O+TCPI;aLr?g8@BV>Ijs4@1GpFP zfH=aZj5_uXMGGtNH^6J-36GjM2@N>20`~@9l}32wLo=+XF)N-0AK;eX34hdWu9CDA zvvQZedB^X)A>j*Zem+q>E;T-omSPUT{eYVn5*{<3fv!fjezGEZ&{0-(y(IG z5db{1l=!dqPep}fRtl-VzO907OIlY+koZhB?rKox667;9nXDFH;|et|qf`(u((W*<%$9s%0Zl_2akf z#OZ`^03HHdrt~->{}<)$L_ZaAGB_z{7xhDiA(oaOl670frTL zIPfR|mr|aO6&Pj(9sxW_k@#oc>Au0B99E!0|&GPA7x|@DIS9jYz_4^}kCoJqs(O zV}P5O5MDOb8GR{c<)pO_JFo(b1=YujsA^@^VJJX2Kq3yfzb)az1FmkzM-s4-M7#ez zSk7egUGbon3e*b$MGjc|h6C^f;9lM&p{U<&IeMh90#5|q5JdQ)T_ce-vjR^7o)|`W z(?Kb`t(g_6d<348MEJ&5^;3A+z{*{X?3Tl9IU*U1=>l$L_!1)|W(A%NTtS8SZ~Dzf zpOIOC=KwcVCER0!-f5f_3@cLk0z6lZ@CgAo&=Fu(?j9If9<+l*E~rIMiTd#TmVWpo z5e{h4zXG?^Av~y`JgOM8Qi~oWo*|{Msdp;6*x$e{F(IzX+c|ipG7s*`gCAw_O;e|@ z*s{UiUhNi$x;^=S+i8x4FO5W^-`O>pQ;^#mW@62Og#w-jJl2BnyEjuK(5ZqIcs}C` zxbc}*Ok^=D%BBFgvorB?hv|;S?S_?-4U%+*4pkn@!4zR3sGgogRa&Ymj}OY=z!l?; zLp!<&7vU?J(^z(95PP8&!9B=_+zSl;`hq=_5CL8c+&F;ncblfJM>_y3GW!ACI*jmv zs#fSjFe?`>WAei~+?^6oi=&9z=kLQu@r4B(D2;XpP$$dvxdGXq;CjRo_fGYb^U_kx zgOiPV{fyQ1Qc%6(iF)eb2Y>AMhXe33;6DYtWan{A9x*HMa^SB&5>W~b5X2m*NHE_ot#8-Dc(TJ)H zt5DkFn%X(V>3s;Z^OXE+@%ZgZVJ=jxdeYCo2_@9-X)E16dnUryAdFTOh52+~FX{jb zhElEt{-T!f{b^Uw!(djSl;b2l*@o%?%TUU7;67<0u2=So0hpA42Up6v3+@cTV^t4o z!Y`tpwMlM8dk+Va^|2FWd)M+CK;LN|aznNaa8H-_VU5R`A&w|SCIY;X$tn?k=tmE9 zO_>#V6Ywxq!W|YH-9$qTD>7~duB}eEYQ=I@d|?VJWh@q&;?cjWA@K{;w*qzFywB6| zhi^DQq6N6G21)p7Ou2zgO|Wtoz1B?QJ0w~`P17XmRquYe*ir}w;IeLbgtQ5N+tC;A z0A|I&RStORbHdB*yK3VrY*;zzaT`bU>^OD^Q<+s$fFY>MhgJEHMWzgHHWg zud?0Yir^|+5!dC>`uUh8h6kn4ZsGcZ_J_Be|Gv>rWjN?%mxn@2B>s2CYtKMoc0z2& zerp(FO^)W0A24s-`#3eO%ZeBSN=6j;f?0l#P;{V6|1}Qhh^!inm1ViG36nFB{H>ZS4%(bPfJjU=kt z_(aTUG6y{F8o(RV30Lp@xjT9UuyWV%V)Q;?fuw$M+o0mBeL!C>(AkCmuoX2;2x{e! zU|5kRrjwW~a@7JJUqJW=>j~(#F)K+#?rKvFwN9P}32jh+3e=!WPCxKrARN#=(*gdp zf+Q4Q|7S-C96cwFHpLru)z-Gk~gc-INuOOBSJW5G0_`W$#>BdMC%n7zZ+K3F-` zqyG(;=ODKevY&BTy6_HcChvYLpIG2*X=rd%+2)vOpz4A8v6ZNw{DU#o$s9Op2kVP# zkn0Oj!(@F~Q#*WUxDQ?ca6m122|QAT@DBPn-O-1Jl_bQE-M$>Fs1q7>9ZARFR;#H! z+YGM{|ALp~ue~J05#N*5TsBD za&63N%%8DP$lVyYrz-_F7@x9NT8deP+}m|43LJ%LAu*C^w~O|ut0r)-4I+2Ly%#ZQ z$V9jddaW|KM$nf9ZMEvq^kWJfYk*SecD$NQAs8D%g6ctW{jrxAvXoD|U0v=fL)jvV z8Mx*V#BG_s4%LTw05=C7B;aPBH(TOMVOW7%0Dt*`_#V}P%BUEy;zL49;K7N6@7t}X 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�r^( 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

Htb`^02j~U-ig9@*|_3D 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

;ia_od8**~5SR9mT3#_^jSOZv7kZ*#)4&?ZKU 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

0~o^CA|YXruH`Ae}hWxRM@>VRv6 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

0}y?E35|8+7|feIey0-mPikO%Ho1 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